芹菜在任务完成时迭代

2024-04-25 23:59:44 发布

您现在位置:Python中文网/ 问答频道 /正文

也许我对芹菜有些误解,但我已经坚持了很久了。在

我有一堆简单的子任务,我想在它们完成时迭代它们,而不是等待它们全部完成。我试过了:

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."

那么,我如何在任务结果完成时迭代它们呢?在


Tags: theinfortaskdbdefresultgenerator
1条回答
网友
1楼 · 发布于 2024-04-25 23:59:44

我已经实现了这一点,并在过去使用过。我认为.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()

相关问题 更多 >