我们假设有一个定期任务计划每小时运行一次。工作人员接收任务并开始处理。在处理任务时,celeryd进程(通过supervisord控制)重新启动(supervisorctl重启全部)。即使任务从未完成执行,也不会重新执行。
如何立即重新排队定期任务并防止多个版本的任务同时运行?
答案 0 :(得分:0)
可能有一种更好的方法可以做到,但你可以只使用周期性任务在队列中创建一个常规任务(例如,my_actual_task.defer(…)
),这将不会被删除从队列到完成(假设您使用的是acks_late)。
如果你没有使用acks_late,你可以试一试大部分任务,并在相应的finally
中放一个my_actual_task.retry()
。
无论哪种方式,你通常应该避免杀死工人而不给他们机会完成他们正在做的事情。