如果定期任务在芹菜中终止,如何将其排入队列?
How to enqueue a periodic task if it gets terminated in celery?
假设有一个定期任务安排在每小时 运行。工作人员收到任务并开始处理。在处理任务时,celeryd 进程(通过 supervisord 控制)重新启动(supervisorctl restart all)。即使任务从未完成执行,也不会重新执行。
如何立即重新排队周期性任务并防止多个版本的任务同时出现运行?
可能有更好的方法,但是您可以只使用周期性任务在队列中创建一个常规任务(例如,my_actual_task.defer(…)
)在完成之前不会从队列中删除(假设您使用的是 acks_late)。
如果您不使用 acks_late,您可以尝试将大部分任务放在一起,并在相应的 finally
中放置一个 my_actual_task.retry()
.
无论哪种方式,您通常都应该避免杀死工人而不给他们机会完成他们正在做的事情。
假设有一个定期任务安排在每小时 运行。工作人员收到任务并开始处理。在处理任务时,celeryd 进程(通过 supervisord 控制)重新启动(supervisorctl restart all)。即使任务从未完成执行,也不会重新执行。
如何立即重新排队周期性任务并防止多个版本的任务同时出现运行?
可能有更好的方法,但是您可以只使用周期性任务在队列中创建一个常规任务(例如,my_actual_task.defer(…)
)在完成之前不会从队列中删除(假设您使用的是 acks_late)。
如果您不使用 acks_late,您可以尝试将大部分任务放在一起,并在相应的 finally
中放置一个 my_actual_task.retry()
.
无论哪种方式,您通常都应该避免杀死工人而不给他们机会完成他们正在做的事情。