我正在使用芹菜 3.0.12。
我有两个队列:Q1,Q2。
一般来说,我将主要任务放在 Q1 中,然后调用 Q2 中的子任务。我不想为子任务存储任何结果。所以我的子任务有装饰器@celery.task(ignore_results=True)。
我的主要任务现在应该等到子任务完成。因为我没有写结果。我不能使用:AsyncResult。有没有办法在主任务中等待子任务完成而不将状态存储到后端。我对 AsyncResults 的所有尝试都不是成功的燃料(它依赖于后端)。似乎 get() 也依赖于后端。
代码中的整个故事:
@celery.task(ignore_result=True)
def subtask():
#Do something
@celery.task
def maintask():
# Do something
# Call subtask on Q2:
res = subtask(options={'queue':'Q2'}).delay()
# Need to wait till subtask finishes
# NOT WORKING (DOES NEVER RETURN)
res.get()
我正在用 Celery Flower 监控整个应用程序,我可以看到子任务正在成功完成。Celery 如何检测到这种状态?我浏览了他们的代码,但不知道他们是如何进行检测的。