python - 在 SIGSEGV 之后处理 celery 中的 WorkerLostError

标签 python celery

我遇到了一种情况,由于低质量的 C/C++ 依赖,我的工作人员时常被 SIGSEGV 杀死。在这些情况下,我需要知道哪些任务失败了。有没有办法对产生的 WorkerLostError 使用react并了解哪个任务(例如通过 taks_id)导致 worker 丢失?还有其他方法可以实现某些任务由于 SIGSEGV 而失败吗?

谢谢

最佳答案

我找到了适合我的解决方案。首先,我将任务设置为 acks_late=True,允许在未完成时重试。但是,celery 故意避免在出现段错误后重试,以防止无限消息循环。我使用 task_reject_on_worker_lost=True 禁用了此功能。现在,在出现段错误之后,任务将使用相同的 task_id 再次运行,我可以检测到第二次运行时任务会正确失败。

另一个没有危险的 task_reject_on_worker_lost=True 的解决方案是自定义请求和任务类 ( celery docs )。 on_failure 在工作线程主线程中运行,并将在发生 WorkerLostError 时调用。任务 self 上的 on_failure 回调(由丢失的子进程调用)将不会被调用。

关于python - 在 SIGSEGV 之后处理 celery 中的 WorkerLostError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54693518/

相关文章:

django - 无法连接到redis ://localhost:6379/0: Error 111 connecting to localhost:6379. 连接被拒绝

python - 监控 celery ,我应该用什么?

python - 你能强制 celery 计划任务在 apply_sync 上立即运行吗?

python - 如何在不同的 celery 任务 worker 中共享 tensorflow 模型

python - 如何向 tkinter 窗口添加填充,而不需要 tkinter 将小部件居中?

python - 我如何使用 torch.stack?

python - 如何在 python 脚本中运行终端命令?

python - 在信号/槽中使用自定义对象(类似 PyQt_PyObject)

javascript - Django 和类似 ajax 的按钮仅适用于第一项

celery - 如何将Supervisor + Django + Celery与多个队列和工作程序一起使用?