在Celery 2中,我有一个如下设置的TaskSet:
for (item,jobId) in itemsAndJobs:
tasks.append(waitForOutput.subtask((jobId,item)))
job = TaskSet(tasks)
result = job.apply_async()
然后,我会通过检查来检查TaskSet是否已经完成:
job.ready() and job.successful()
这很好 - waitForOutput任务会慢慢移动,然后当它们全部完成时,工作检查就会完成。我可以多次检查而没有任何问题。
在芹菜3中,我尝试通过改变
快速而肮脏的方式将其更改为一组TaskSet(tasks)
到
group(tasks)
除非我等到所有waitForOutput任务完成之后才检查准备就绪并且成功,否则这永远不会有效。 ready()始终返回false。我添加了一些日志记录和30秒的默认重试,这就是我所看到的 -
如果我使用我的Celery 3代码并从任务中导入TaskSet并使用它而不是组,我会看到相同的行为。
我很想被告知我只是错误地使用群组!
答案 0 :(得分:0)
我通过移动到Redis作为我的结果后端解决了这个问题。这似乎是使用AMQP作为后端的错误。