Celery组仅具有自上次检查以来已完成的结果

时间:2012-08-17 14:17:33

标签: celery

在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秒的默认重试,这就是我所看到的 -

  • 启动5个waitForOutput作业
  • check ready(),没有waitForOutput作业已完成,ready is false
  • 2 waitForOutput工作完成
  • check ready(),ready为false,job.check_completed()为2
  • check ready(),ready为false,job.check_completed()为0
  • 剩余3个waitForOutput作业完成
  • check ready(),ready为false,job.check_completed()为3

如果我使用我的Celery 3代码并从任务中导入TaskSet并使用它而不是组,我会看到相同的行为。

我很想被告知我只是错误地使用群组!

1 个答案:

答案 0 :(得分:0)

我通过移动到Redis作为我的结果后端解决了这个问题。这似乎是使用AMQP作为后端的错误。