当我的django应用程序的新版本部署到heroku时,工作人员被迫重新启动。我有一些长期运行的任务,应该在被杀之前进行一些清理。
我已经尝试注册一个似乎不会被调用的worker_shutdown钩子。
我也尝试了Notify celery task of worker shutdown中的答案,但我不清楚如何在此上下文中中止给定任务,因为调用celery.task.control.active()会抛出异常(芹菜不再运行) )。
感谢您的帮助。
答案 0 :(得分:0)
如果您控制部署,也许您可以运行一个脚本,Control.broadcast执行自定义命令register beforehand并且只有在收到所需的回复后才能执行(您必须实现该逻辑)你继续部署(或引发TimeoutException)?
此外,芹菜已经有一个predefined command for shutdown,我猜你可能会在你的实例或工人的子类中重载。命令具有传递Panel实例的优点,允许您访问the consumer。这应该会在那里暴露很多控制权......