2015-06-25 56 views
2

是否可以在不進行輪詢的情況下監控芹菜任務的狀態?監視芹菜任務狀態沒有輪詢?

舉例來說,如果我有一個任務,定期更新使用update_state它的狀態:

@task(bind=True) 
def my_task(self): 
    for x in range(100): 
     time.sleep(1) 
     self.update_state(state='PROGRESS', meta={'x': x}) 

是否可以監控來自另一個進程狀態,沒有投票?

回答

2

我還沒有自己做過,所以這不是一個完整的答案,但我有興趣解決同樣的問題。我有三個想法值得考慮:

1

這取決於您的經紀人/後端。如果他們使用pub/sub,那麼你的進程將不需要輪詢任務狀態。如果他們不這樣做,那麼你需要進行輪詢(或者更普遍的是一個涉及發送消息詢問狀態的過程)。

我認爲芹菜和redis都有這種能力。

+0

「進程不需要輪詢任務狀態」 - 但它將如何訪問任務狀態? –

+0

它訂閱('pub/sub')更新 – Maximilian

+1

但是,具體如何做到這一點? Celery會公開API嗎? –

0

假設您想要跟蹤生產者的進度,您需要使用事件監視API。其他apis,處理程序和信號,只在工作人員中運行;所以沒有用於追蹤製作人的進度。

請查看文檔中名爲「監視和管理指南」的部分,您應該能夠幾乎逐字地運行示例代碼(對於事件接收者)。但是,它並沒有提到,也需要爲工作人員啓用事件生成。你的工作的-E參數將解決這個問題。