在芹菜工作程序退出之前,在KeyboardInterrupt上执行一些操作



当遇到键盘中断(比如SIGINT(时,在退出芹菜工作程序之前,有没有办法执行一些操作?我试过在我的任务中使用信号模块,比如:

signal.signal(signal.SIGINT, keyboard_interrupt_handler)

但它并没有按照我预期的方式工作。keyboard_interrupt_handler确实被执行了,但由于执行需要几秒钟的时间,所以进程在执行完成之前就被终止了。

我还尝试过用signal.pthread_sigmask临时屏蔽SIGINT信号,并在线程中运行处理程序(因为它们不能被杀死?(,但它面临着同样的问题。

有没有办法实现这样的目标?

我建议您尝试为工作人员关闭信号实现一个处理程序。一般来说,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)

相关内容

  • 没有找到相关文章

最新更新