如果它在芹菜中被终止,如何排队定期任务?

时间:2016-03-23 20:54:44

标签: django rabbitmq celery

我们假设有一个定期任务计划每小时运行一次。工作人员接收任务并开始处理。在处理任务时,celeryd进程(通过supervisord控制)重新启动(supervisorctl重启全部)。即使任务从未完成执行,也不会重新执行。

如何立即重新排队定期任务并防止多个版本的任务同时运行?

1 个答案:

答案 0 :(得分:0)

可能有一种更好的方法可以做到,但你可以只使用周期性任务在队列中创建一个常规任务(例如,my_actual_task.defer(…)),这将不会被删除从队列到完成(假设您使用的是acks_late)。

如果你没有使用acks_late,你可以试一试大部分任务,并在相应的finally中放一个my_actual_task.retry()

无论哪种方式,你通常应该避免杀死工人而不给他们机会完成他们正在做的事情。