2017-03-28 39 views
0

我沒有芹菜的經驗,所以我正在研究它,如果我的用例可以在芹菜解決。如何重置芹菜的時間限制任務

客戶端將向Celery提交一份工作,該工作將在CeleryTask中執行。然後,客戶必須每隔30秒發送一次Keepalive以保持這項工作的活躍。一旦工作沒有被保持信息刷新,工作將被取消。

我能想到的兩種解決方案:

  1. 創建將有30秒的硬時限每個作業任務。當客戶端發送Keepalive時,路由器會發送消息給相關的工作人員重設硬限制。

  2. 每個工作任務都沒有時間限制。對於每個工作任務,都會有另一個特殊的看門狗任務啓動。看門狗任務將延遲30秒啓動。如果新的Keepalive從客戶端到達,則看門狗任務將被取消並重新創建。再延遲30秒。如果看門狗被執行,它將終止作業任務,從而將其從系統中消除。

1.很簡單,但我不知道如何重置任務時間限制。解決方案2似乎更正確,但恐怕會有各種競爭條件。看門狗任務應該可能在單獨的隊列中運行,只保留給看門狗。

這是怎麼回事?即使我的一個解決方案或其他。

回答

0

在我的理解中,你只是想擁有一個middleware(一個接收keepalive,就去控制任務),那麼這個鏈接會幫你celery.app.control.Control.terminate

  1. 獲取任務的task_idapply_asyncdestinationall workers
  2. 聽從客戶
  3. 如果time limit到達keepalive並沒有keepaliveterminate任務app.control.terminate(task_id, reply=True)