2012-10-03 43 views
4

当我的新版本的django应用程序部署到heroku时,工作人员被迫重新启动。我有一些长期运行的任务,应该在被杀之前进行一些清理。如何在部署到Heroku时中止芹菜任务

我试着注册一个worker_shutdown钩子,它并不是每个人都被调用。

我也尝试了Notify celery task of worker shutdown的答案,但我不清楚如何从此上下文中放弃给定的任务,因为调用celery.task.control.active()会引发异常(芹菜不再运行)。

感谢您的任何帮助。

回答

0

如果你控制部署,也许你可以运行一个脚本,它可以执行一个Control.broadcast的自定义命令,你可以register beforehand,并且只有在收到所需的回复(你必须实现该逻辑)之后,你才会继续部署(或引发TimeoutException)?

另外,芹菜已经有predefined command for shutdown,我猜你可能在你的实例或工人的子类中超载。命令具有通过Panel实例的优势,允许您访问the consumer。这应该暴露在那里很多控制...