簡體   English   中英

如何重置芹菜任務的時間限制

[英]How to reset time limit on Celery Task

我沒有Celery的經驗,所以我正在研究我的用例是否可以在Celery中解決。

客戶端將向Celery提交作業,該作業將在CeleryTask中執行。 然后,客戶端必須每30秒發送一次keepalive才能保持此作業的活動狀態。 一旦未通過Keepalive消息刷新作業,該作業將被取消。

我可以想到兩種解決方案:

  1. 創建的每個任務都會有30秒的困難時間限制。 當客戶端發送保持活動狀態時,路由器將向相關工作人員發送消息以重置硬限時。

  2. 每個作業任務都沒有時間限制。 對於每個工作任務,將啟動另一個特殊的看門狗任務。 看門狗任務將延遲30秒啟動。 如果新的Keepalive來自客戶端,則取消並重新創建看門狗任務。 再次延遲30秒。 如果執行了看門狗,它將殺死作業任務,從而將其從系統中刪除。

1.更加簡單,但是我不確定如何重置任務時限。 解決方案2.似乎更正確,但恐怕會有各種各樣的比賽情況。 看門狗任務可能應該在僅保留給看門狗的單獨隊列中運行。

這樣的事情怎么可能? 甚至是我的解決方案之一。

以我的理解,您只想擁有一個middleware (一個用於接收keepalive控件),然后此鏈接將幫助您celery.app.control.Control.terminate

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

暫無
暫無

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

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