[英]How to reset time limit on Celery Task
我沒有Celery的經驗,所以我正在研究我的用例是否可以在Celery中解決。
客戶端將向Celery提交作業,該作業將在CeleryTask中執行。 然后,客戶端必須每30秒發送一次keepalive才能保持此作業的活動狀態。 一旦未通過Keepalive消息刷新作業,該作業將被取消。
我可以想到兩種解決方案:
創建的每個任務都會有30秒的困難時間限制。 當客戶端發送保持活動狀態時,路由器將向相關工作人員發送消息以重置硬限時。
每個作業任務都沒有時間限制。 對於每個工作任務,將啟動另一個特殊的看門狗任務。 看門狗任務將延遲30秒啟動。 如果新的Keepalive來自客戶端,則取消並重新創建看門狗任務。 再次延遲30秒。 如果執行了看門狗,它將殺死作業任務,從而將其從系統中刪除。
1.更加簡單,但是我不確定如何重置任務時限。 解決方案2.似乎更正確,但恐怕會有各種各樣的比賽情況。 看門狗任務可能應該在僅保留給看門狗的單獨隊列中運行。
這樣的事情怎么可能? 甚至是我的解決方案之一。
以我的理解,您只想擁有一個middleware
(一個用於接收keepalive
控件),然后此鏈接將幫助您celery.app.control.Control.terminate 。
task_id
任務時apply_async
( destination
或all workers
) keepalive
time limit
並且沒有keepalive
,則terminate
任務app.control.terminate(task_id, reply=True)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.