2012-10-03 71 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。這應該暴露在那裏很多控制...