我是芹菜单元测试任务。 我有链式任务,也有组,所以产生了和弦。
测试应如下所示:
我尝试了以下方法:
def wait_for_result(result):
result.get()
for child in result.children or list():
if isinstance(child, GroupResult):
# tried looping over task result in group
# until tasks are ready, but without success
pass
wait_for_result(child)
这会造成死锁,永远重试chord_unlock。 我对任务结果不感兴趣。 如何等待所有子任务完成?
你试过和弦+回拨吗?
http://docs.celeryproject.org/en/latest/userguide/canvas.html#chords
虽然这是一个老问题,我只是想分享我如何摆脱僵局的问题,以防万一它有助于某人。
正如芹菜日志所说,永远不要在任务中使用
get()
。这确实会造成僵局。我有一组类似的芹菜任务,其中包括一系列的小组任务,因此使它成为一个和弦。我使用tornado通过发出HTTP请求来调用这些任务。所以我做了这样的事:
当tornado调用
celeryTask()
时,链将开始执行,someTask()
的UUID将保存在job
。它看起来像这个UUID被返回,并且
celeryTask()
在链开始执行之前就退出(理想情况下),从而为另一个进程留下运行的空间。然后我用龙卷风层来检查任务的状态。有关龙卷风层的详细信息,请参见stackoverflow question
相关问题 更多 >
编程相关推荐