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()
时可能会死亡。生产者死亡后,将重新启动。
重新开始生产时,是否可以恢复联接?
我是芹菜新手;梳理了文档和示例,但没有找到答案。希望专家可以帮助我指出正确的方向。
答案 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