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

问题描述 投票:0回答:1

遇到键盘中断(例如SIGINT)时,有没有一种方法可以在退出芹菜工人之前执行一些操作?我曾尝试在类似的任务中使用信号模块:

signal.signal(signal.SIGINT, keyboard_interrupt_handler)

但是它无法按我期望的方式工作。 keyboard_interrupt_handler确实得到执行,但是由于执行需要花费几秒钟的时间,因此该过程在完成执行之前被终止。

[我也试图用SIGINT暂时阻止signal.pthread_sigmask信号,并在线程中运行处理程序(因为它们不能被杀死?),但是它面临着同样的问题。

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

python python-3.x celery celerybeat
1个回答
0
投票

我建议您尝试为worker-shutdown signal实现一个处理程序。通常,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)
© www.soinside.com 2019 - 2024. All rights reserved.