我想優雅地退出芹菜任務(即不通過調用revoke(celery_task_id, terminate=True)
)。我以爲我會向設置標誌的任務發送消息,以便任務函數可以返回。與任務溝通的最佳方式是什麼?停止芹菜任務優雅
Q
停止芹菜任務優雅
3
A
回答
5
使用信號這一點。芹菜的revoke
是的正確選擇;它默認使用SIGTERM,但如果您願意,您可以使用signal
參數specify another。
只是爲其設置一個信號處理程序在任務(使用signal
module)是正常終止任務。你
6
還可以使用AbortableTask
。我認爲這是優雅地停止任務 的最佳途徑。
http://docs.celeryproject.org/en/latest/reference/celery.contrib.abortable.html
from celery.contrib.abortable import AbortableTask
from proj.celery import app
@app.task(bind=True, base=AbortableTask)
def abortable_task(self):
while not self.is_aborted():
print 'I am running'
print 'I was aborted!'
如果您保存ID任務的地方,只要你願意,你可以調用它。
from celery.contrib.abortable import AbortableAsyncResult
abortable_task = AbortableAsyncResult(task_id)
abortable_task.abort()
相關問題
- 1. 使芹菜停止消費任務
- 2. 芹菜任務優先級
- 3. docker-compose和優雅的芹菜關機
- 4. 終止當前的芹菜任務
- 5. 芹菜:連接錯誤中止任務
- 6. 芹菜鏈任務
- 7. 芹菜如何停止任務的發展與開拓機器
- 8. 停止芹菜的問題
- 9. 優雅地停止NSXMLParser?
- 10. 關掉芹菜任務
- 11. 芹菜任務不工作
- 12. 去抖芹菜任務?
- 13. 芹菜任務剖析
- 14. 芹菜任務instanciation緩存
- 15. 芹菜任務計劃
- 16. 芹菜任務翻譯
- 17. 如何從先前的芹菜任務中產生芹菜任務?
- 18. 執行其他芹菜任務不工作的芹菜週期性任務
- 19. 芹菜擊敗有時停止工作
- 20. 芹菜任務計劃(芹菜,Django和RabbitMQ)
- 21. 芹菜任務重試(芹菜,Django和RabbitMQ)
- 22. 芹菜 - 需要優先運行的任務
- 23. RabbitMQ上芹菜任務優先級的解決方法?
- 24. 在PowerShell腳本中優雅地停止
- 25. 如何優雅地停止java進程?
- 26. 優雅地停止一個std ::線程?
- 27. 如何優雅地重新啓動芹菜工?
- 28. 運行的systemd服務強制停止芹菜工人
- 29. 阻止任務在芹菜和絃中運行的任務選項
- 30. 如何防止任務標記爲成功的回報[芹菜]
是否可以捕捉任意信號並執行一些清理操作?另外,信號平臺是獨立的嗎? – orange 2013-05-12 10:20:24
Python的'signal'模塊文件在不同的平臺,不同的是在Windows上支持的唯一信號是SIGABRT,SIGFPE,SIGILL,SIGINT,SIGSEGV,或SIGTERM,所以你應該堅持的。所有這些都可以被捕獲。無論何時發現任何信號都會被觸發,將無法設置處理程序,如果這就是您要求的。 – Cairnarvon 2013-05-12 10:30:47
我終於實現了這一點,它可以在OSX和Linux上正常工作。但是,在Windows(8)上,我似乎無法捕捉到信號。我嘗試過SIGABRT和SIGTERM,但沒有一個被抓到。我在'@ task'註釋的函數中安裝了監聽器。還有什麼,我需要做什麼? – orange 2013-06-10 23:57:21