我想优雅地退出芹菜任务(即不通过调用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. 优雅中止rake任务
- 4. 芹菜任务
- 5. 芹菜任务
- 6. 单一芹菜任务暂停所有其他芹菜工
- 7. 芹菜工人的优雅关机
- 8. docker-compose和优雅的芹菜关机
- 9. 优雅地停在码头集装箱的芹菜
- 10. 如何在芹菜中添加新任务而不停止芹菜实例在django芹菜?
- 11. 芹菜:连接错误中止任务
- 12. 终止当前的芹菜任务
- 13. 芹菜链任务
- 14. 推芹菜任务
- 15. 芹菜如何停止任务的发展与开拓机器
- 16. 芹菜节拍任务在几秒后停止失败(opencv)
- 17. 停止线程,直到芹菜任务完成
- 18. 停止芹菜的问题
- 19. 优雅地停止NSXMLParser?
- 20. 优雅地停止线程
- 21. 任务中的芹菜任务
- 22. 芹菜任务instanciation缓存
- 23. Django芹菜任务记录
- 24. 芹菜任务更新
- 25. Heroku芹菜背景任务
- 26. 芹菜任务链取消?
- 27. unittest芹菜任务assertRaises
- 28. 子类化芹菜任务
- 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