恢复芹菜job.apply_async.join()

时间:2018-10-23 23:44:59

标签: celery

TL; DR:如果我的生产者流程在向消费者发送了一些工作后崩溃,那么一旦重新启动,它将如何继续等待消费者完成工作?


producer.py将工作项分发给一组消费者(已注册的Celery任务),如下所示:

from celery import group, signature

job = group(
    signature(task_name, args=(x,)) for x in xrange(100)
)

group_result = job.apply_async()

group_result.join()  # blocks until tasks complete

消费者需要很长时间才能完成,因此生产者有时/在调用join()时可能会死亡。生产者死亡后,将重新启动。

重新开始生产时,是否可以恢复联接?

我是芹菜新手;梳理了文档和示例,但没有找到答案。希望专家可以帮助我指出正确的方向。

1 个答案:

答案 0 :(得分:0)

出于记录,我的解决方案是将任务id(存储在某些外部文件/ db /任何文件中)存储。

pickle

现在,如果上面的job = group( signature(task_name, args=(x,)) for x in xrange(100) ) group_result = job.apply_async() # store group_result.results somewhere durable persist(some_db, group_result.results) group_result.join() # blocks until tasks complete 失败了,我们可以这样恢复:

join