python - 在 celery worker 退出之前对 KeyboardInterrupt 执行一些操作
问题描述
当遇到键盘中断(比如 SIGINT)时,有没有办法在退出 celery worker 之前执行一些操作?我曾尝试在我的任务中使用信号模块,如下所示:
signal.signal(signal.SIGINT, keyboard_interrupt_handler)
但它并不像我期望的那样工作。确实会执行,keyboard_interrupt_handler
但由于执行需要几秒钟,因此该进程在完成执行之前就终止了。
我也尝试过暂时阻止SIGINT
信号signal.pthread_sigmask
并在线程中运行处理程序(因为它们不能被杀死?),但它也面临同样的问题。
有没有办法实现这样的目标?
解决方案
我建议您尝试为worker-shutdown signal实现一个处理程序。一般来说,Celery 信号非常有用,Celery 用户应该熟悉它们,Celery 事件也是如此。
示例代码:
app = Celery('my_tasks', include['my_tasks.tasks', 'their_tasks.tasks'])
@worker_shutdown.connect
def handle_worker_shutdown(**kwargs):
mymodule.handle_worker_shutdown(app, _LOGGER, **kwargs)
推荐阅读
- reactjs - 菜单图标未映射到 DrawerRouter Navigation - React Native Navigation
- xamarin - UIActivityIndicatorView 为黑色
- javascript - 回发后 JQuery 滚动事件不会立即触发
- php - 错误:“从空值创建默认对象”
- mysql - MySQL inquery - 如果单元格为空,则
- c++ - 如何访问委托的paint()函数中的另一个索引?
- nginx - nginx入口Jenkins路径重写配置不起作用
- iis - 是否可以让 IIS 基于 git 分支动态创建网站?如果是这样,我会怎么做?
- c# - 如何将数据从另一个操作结果传递到索引视图
- excel - 使用 Excel VBA 和 CreateObject("htmlfile") 时获取受保护的 HTML 字段