4

当我的 django 应用程序的新版本部署到 heroku 时,工作人员被迫重新启动。我有一些长时间运行的任务,应该在被杀死之前执行一些清理工作。

我已经尝试注册一个似乎并不是每个都被调用的 worker_shutdown 钩子。

我也尝试过通知 celery task of worker shutdown的答案,但我不清楚如何在此上下文中中止给定任务,因为调用 celery.task.control.active() 会引发异常(celery 不再运行)。

谢谢你的帮助。

4

1 回答 1

0

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

此外,芹菜已经有一个预定义的关闭命令,我猜你可能会在你的实例或工作者子类中超载。命令具有传递 Panel 实例的优点,该实例允许您访问consumer。那应该在那里暴露很多控制权......

于 2013-02-18T19:47:11.663 回答