在 celery worker 退出之前对 KeyboardInterrupt 执行一些操作
Perform some actions on KeyboardInterrupt before celery worker exits
有没有办法在遇到键盘中断(比如 SIGINT)时在退出 celery worker 之前执行一些操作?我试过在我的任务中使用信号模块,如下所示:
signal.signal(signal.SIGINT, keyboard_interrupt_handler)
但它并没有像我期望的那样工作。 keyboard_interrupt_handler
确实得到执行,但由于执行需要几秒钟,进程在完成执行之前终止。
我也尝试用线程中的处理程序 signal.pthread_sigmask
和 运行 暂时阻止 SIGINT
信号(因为它们不能被杀死?)但是它面临同样的问题。
有没有办法实现这样的目标?
我建议您尝试为 worker-shutdown signal. In general, Celery signals 实现一个处理程序非常有用,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)
有没有办法在遇到键盘中断(比如 SIGINT)时在退出 celery worker 之前执行一些操作?我试过在我的任务中使用信号模块,如下所示:
signal.signal(signal.SIGINT, keyboard_interrupt_handler)
但它并没有像我期望的那样工作。 keyboard_interrupt_handler
确实得到执行,但由于执行需要几秒钟,进程在完成执行之前终止。
我也尝试用线程中的处理程序 signal.pthread_sigmask
和 运行 暂时阻止 SIGINT
信号(因为它们不能被杀死?)但是它面临同样的问题。
有没有办法实现这样的目标?
我建议您尝试为 worker-shutdown signal. In general, Celery signals 实现一个处理程序非常有用,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)