我正在尝试使用芹菜来运行多个异步作业,而当功能的行为应有的范围时,我会遇到以下错误:
RuntimeWarning: Never call result.get() within a task! See http://docs.celeryq.org/en/latest/userguide/tasks.html#task-synchronous-subtasks
即使我从不致电result.get.get.get.get.get()。我的程序的工作方式是芹菜被订阅了一个队列,这开始了管理任务。根据消息的内容,它将设置1个或更多子任务并将其作为异步组运行,然后等待它们完成:
job = group(tasks) if len(tasks) == 1 else group(*tasks)
result = job.apply_async()
# Wait for jobs to finish.
cycles = 0
while not result.ready() and cycles < (timeout / step):
time.sleep(step)
cycles += 1
if not result.successful():
return False
return True
这些都隐含地调用results.get()
?有1个任务触发许多(独立的)子任务,这一点是否可行?我查找了类似的问题,但是它们似乎都没有做与我在这里完全相同的事情。
,所以我环顾四周,我认为问题是我正在为自己想做的事情应用错误的策略。我想启动N任务,然后报告他们是否工作。但是,每个子任务已经向数据库报告其状态,因此等待检查只是为了使呼叫工人无目的而被阻止。
我更改了功能:
job = group(tasks) if len(tasks) == 1 else group(*tasks)
job.apply_async()
就是这样。任务启动,调用函数退出,释放了工人。子任务按正常运行,我没有错误。我要做的事情只有在我试图打来的呼叫取决于获得每个子任务的结果时才有意义。