簡體   English   中英

Python Celery任務重新啟動celery worker

[英]Python Celery task to restart celery worker

在celery中,是否有一種簡單的方法來創建一個(一系列)任務,我可以用來自動重啟工作程序?

目標是讓我的部署每次從github獲得新的源時就自動重啟所有子芹菜工作者。 這樣一來,我可以向該計算機上的管理celery實例發送一個restartWorkers()任務,該任務將終止(實際上是stopwait)該計算機上的所有celery worker進程,並使用新模塊重新啟動它們。

該計划是為每台機器配備:

  • 管理節點[隊列:管理,特定於機器]-負責管理機器上其余的工作進程,啟動新節點並根據需要殺死舊節點
  • 輔助節點[隊列:特定於git修訂版,特定於輔助程序,特定於計算機]-實際上負責執行工作。

看起來我需要的代碼在dist_packages / celery / bin / celeryd_multi.py中的某個位置,但是對於啟動工作人員而言,源代碼是相當不透明的,而且我無法說出它應該如何工作或實際上在何處啟動節點。 (看起來shutdown_nodes是用來終止進程的正確代碼,我正在逐步調試它,以弄清楚我的論點是什么)

我可以在某處調用某個函數或函數restart_nodes(自身,節點),還是要從python內部運行Shell腳本?

/此外,有比殺死並重新啟動進程更簡單的方法將源重新加載到Python中嗎? 如果我知道重新加載模塊確實可以工作(實驗說沒有效果。對功能的更改在重新啟動過程之前不會滲透),那么我將這樣做,而不是使用管理節點進行間接操作。

編輯:由於廣播,我現在可以關機(謝謝mihael。如果我有更多代表,我會投票)。 有什么辦法可以播放重啟? 有pool_restart,但這不會殺死該節點,這意味着它不會更新源。

我一直在celery.bin.celeryd:WorkerCommand()。run()中尋找一些幕后資源,但是在run調用之前和之后都有一些奇怪的事情發生,所以我不能只是調用它功能並完成,因為它崩潰了。 從python腳本調用shell命令以運行另一個python腳本只是有意義0,而且我不敢相信我是第一個想要這樣做的人。

您可以嘗試使用Celery的廣播功能

在這里您可以看到一些很好的示例: https : //github.com/mher/flower/blob/master/flower/api/control.py

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM