在芹菜,是否有一種簡單的方法來創建一系列的任務,我可以用來自動重啓一個工人?Python芹菜任務重新啓動芹菜工
目標是讓我的部署在每次從github獲得新源時自動重啓所有子芹菜工作者。因此,我可以發出一個restartWorkers()任務給該機器上的管理芹菜實例,該實例會殺死(實際上停止)該機器上的所有芹菜工作進程,並使用新模塊重新啓動它們。
該計劃是爲每臺機器有:
- 管理節點[隊列:管理,機專用] - 負責管理機器上的工人的休息,帶來了新的節點和殺害老需要的人
- 工作節點[隊列:特定於git修訂版本,特定於工作人員,機器特定] - 實際負責完成此工作。
它看起來像我需要的代碼是介於dist_packages /芹菜/斌/ celeryd_multi.py,但源是相當不透明的啓動工人,我不能告訴它是如何工作的或者它的實際啓動節點。 (它看起來像shutdown_nodes是正在調用的殺死進程的代碼,我正在慢慢調試我的方式來弄清楚我的論據應該是什麼)
是否有函數/函數restart_nodes(self,節點)的地方,我可以打電話,或者我會從python內運行shell腳本?
/另外,是否有更簡單的方法來重新加載到Python比殺死和重新啓動進程?如果我知道重新加載模塊實際上是工作的(實驗說它不是。函數的改變不會滲透,直到我重新啓動過程),我只是這樣做,而不是管理節點間接。
編輯: 感謝廣播,我現在可以關閉(謝謝你,如果我有更多的代表,我會upvote)。任何方式來播放重新啓動?有pool_restart,但是不殺死節點,這意味着它不會更新源。我一直在尋找一些celery.bin.celeryd中的幕後源代碼:WorkerCommand()。run(),但是在運行調用之前和之後會有一些奇怪的事情發生,所以我可以'只需調用該函數即可完成工作,因爲它崩潰了。從python腳本中調用一個shell命令來運行另一個python腳本只是有意義的,我不能相信我是第一個想要這樣做的人。
「有pool_restart,但這並不能殺死節點,這意味着它不會更新源」 - 真的希望你有這個解決方案,但看起來它在這裏仍然沒有解決。 – AlanSE
你如何管理你的工人?你在使用systemd嗎?你可以有一個execRestart任務,並調用systemctl restart celery.service,例如在部署結束時 – shalbafzadeh
這家公司在4年前還沒有開始,所以現在沒關係,我忘記了。 –