Python 在SIGSEGV后,在芹菜中处理工作误差

Python 在SIGSEGV后,在芹菜中处理工作误差,python,celery,Python,Celery,我遇到过这样一种情况,我的工人由于低质量的C/C++依赖性而不时被SIGSEGV杀死。在这些情况下,我需要知道哪些任务失败了。是否有办法对由此产生的WorkerLosteror作出反应,并了解是哪项任务(例如通过taks_id)导致了工人损失?有没有其他方法可以认识到某些任务由于SIGSEGV而失败 我找到了一个适合我的解决方案。首先,我将任务设置为acks\u late=True,允许在未完成时重试。但是,芹菜故意避免segfaults后的重试,以防止无限的消息循环。我使用task\u rej

我遇到过这样一种情况,我的工人由于低质量的C/C++依赖性而不时被SIGSEGV杀死。在这些情况下,我需要知道哪些任务失败了。是否有办法对由此产生的WorkerLosteror作出反应,并了解是哪项任务(例如通过taks_id)导致了工人损失?有没有其他方法可以认识到某些任务由于SIGSEGV而失败


我找到了一个适合我的解决方案。首先,我将任务设置为
acks\u late=True
,允许在未完成时重试。但是,芹菜故意避免segfaults后的重试,以防止无限的消息循环。我使用
task\u reject\u on\u worker\u lost=True
禁用了此功能。现在,在segfault之后,任务将以相同的
task\u id
再次运行,我可以检测到,在第二次运行时,任务将正常失败

另一个解决方案是自定义请求和任务类(),它没有危险的
任务\u拒绝\u on\u worker\u lost=True。在worker主线程中运行
on\u故障
,并将在
workerLosterError
上调用。任务上的
on_failure
回调是self(由丢失的子项调用)不会被调用