也许我对芹菜有些误解,但我已经坚持了很长一段时间。
我有一些简单的子任务,我想并行运行,我希望在完成时迭代它们,而不是等待所有这些完成。我试过这个:
def task_generator():
for row in db:
yield mytask.s(row)
from celery.result import ResultSet
r = ResultSet(t.delay() for t in task_generator())
for result in r.iterate():
print result
然而,celery首先运行所有任务,并且只有在完成所有任务之后才开始迭代,尽管ResultSet.iterate
的文档阅读"Iterate over the return values of the tasks as they finish one by one."
那么如何在完成任务结果时迭代它?
答案 0 :(得分:0)
我已经实现了这个,并且过去曾经使用过它。我认为.iterate()
已被弃用,所以我自己正在研究一种新的解决方案。
@task
def task_one(foo, bar):
return foo + bar
subtasks = []
for x in range(10):
subtasks.append(task_one.s(x, x+1))
results = celery.Group(subtasks)() # call this
for result in results.iterate(propagate=False):
answer = result.iteritems().next()