【发布时间】:2014-03-13 16:42:58
【问题描述】:
我是新来的芹菜,有一个问题。我有这个简单的任务:
@app.task(name='test_install_queue')
def test_install_queue():
return subprocess.call("exit 0",shell=True)
我稍后会在类似的测试用例中调用此任务
result = tasks.test_default_queue.apply_async(queue="install")
任务在队列 @987654325@ 中成功运行(因为我在 celery 日志中看到它,并且它完成得很好。但我想知道一种以编程方式查找任务 test_install_queue 运行在哪个队列中的方法,来自result中存储的对象。
谢谢!
编辑:
我已将任务更改为:
@app.task(name='test_install_queue',bind=True)
def test_install_queue(self):
return self.request.__dict__
然后我使用apply_async 的结果如下:
result = tasks.test_install_queue.apply_async(queue="install")
assert "install" in result.get()["hostname"]
解决方法是工作人员(主机名)与工作人员中初始化的唯一队列具有相同的名称。
【问题讨论】:
-
谢谢。但我不需要任务 ID,我需要任务运行所在的队列。我通读了 Celery 文档,但没有找到任何东西。
-
查看该部分中提到的链接-> celery.readthedocs.org/en/latest/userguide/…
-
仅供参考,如果您不为任务指定名称,它将与函数名称相同,因此在您的示例中,任务名称是不必要的。此外,您可以为每个任务指定队列,而不是在它始终在同一个队列中时调用它。所以它会是这样的:
@app.task(queue='install')。 -
谢谢你们。问题不在于队列或路由,我想尝试从 celery worker 获取队列名称(我正在静态设置队列,以确保我将“以编程方式”获取的队列是正确的。