2016-03-28 53 views
5

我剛剛安裝了芹菜,我想創建一個簡單的狀態頁面,顯示當前的工人數量及其狀態。芹菜/ Django - 如何以編程方式查看工人狀態

這可能嗎?從網絡搜索我發現最好的是celery.current_app.control.inspect()

但據我所知,它沒有提到關於工人的任何事情。 (如果有問題,我使用Kombu和SQS作爲後端)

+0

爲什麼不使用https://github.com/mher/flower?即使官方的芹菜文檔推薦它(http://docs.celeryproject.org/en/latest/userguide/monitoring.html?highlight=flower#flower-real-time-celery-web-monitor)。 –

+0

花看起來不錯,但對於我的海豚,我需要將其插入內部系統健康檢查。所以我需要以編程方式進行。 – Greg

+1

然後你需要延長花。 – TheGreenGoblen

回答

7

the documentation of celery workers中說明了inspect命令的輸出。

默認情況下,使用celery.current_app.control.inspect()返回一個「檢查器對象」,它允許您詢問所有正在運行的工人的狀態。

i = celery.current_app.control.inspect() 
    i.registered() 

調用i.registered()可以返回類似:

{ 
     '[email protected]': ['tasks.add'], 
     '[email protected]': ['tasks.sleeptask'], 
    } 

總之,「檢查」例如,如果你有一個名爲「加法」和「臥鋪」兩場倒的工人執行該代碼方法registered,active,scheduled等返回一個字典,其結果是調用celery.current_app.control.inspect()時選擇的工人分類的結果(如果沒有工人作爲參數傳遞,則隱式選擇所有工人)。

+0

看起來很有希望。奇怪的是,當我打電話時,我得到一個SQS認證錯誤。即使我的應用程序和工作人員可以正常連接。也許這個調用需要額外的SQS隊列權限? – Greg

+0

以下是錯誤:SQSError:SQSError:403 Forbidden <?xml version =「1.0」?> SenderAccessDenied訪問資源https://queue.amazonaws.com/被拒絕。 37b59c-EE-aa5c-faeb0ecba29f Greg

+0

似乎它可能不被支持:SQS尚不支持工人遠程控制命令(http://docs.celeryproject.org/en /latest/getting-started/brokers/sqs.html#caveats)。 –