You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django Celery报ForkPoolWorker-1 exitcode 70错误及弃用警告如何解决?

错误原因排查与解决方案

WorkerLostError exitcode 70 问题

该错误对应类Unix系统的EX_SOFTWARE错误码,属于进程运行时触发的内部软件错误,常见触发原因和解决方法如下:

  • 系统OOM(内存不足)主动杀掉进程:即使任务不是长运行任务,若单次执行时拉取了超量数据集、操作大文件未及时释放内存,会触发系统OOM Killer终止worker进程。排查时可查看系统日志/var/log/syslog或dmesg输出,搜索OOM关键字确认是否存在系统主动杀进程的记录。
  • 底层依赖异常逃逸:如果任务调用了带C扩展的依赖库(如numpy、pandas、图像处理库等),这类库的段错误、内存越界等问题不会被Python异常捕获机制捕获,会直接终止worker进程。可单独运行任务逻辑代码,逐行加日志定位崩溃的具体代码位置。
  • 进程配置不合理:ForkPool的worker进程数设置超过系统允许的最大进程数、单worker预取任务数过高,都可能触发进程异常退出。可临时调整worker并发数为1,验证是否是并发配置问题,也可切换为gevent/eventlet并发池验证是否为fork模式的兼容性问题。
  • 任务逻辑包含直接终止进程的调用:检查任务代码中是否存在os._exit()、主动发送kill信号等会直接终止进程的逻辑,这类操作不会触发Celery的异常处理,会直接报worker退出错误。

弃用警告处理

该警告和本次报错无直接关联,为兼容后续Celery 6.x版本可调整配置:
Celery 5.x版本已废弃大写CELERY_开头的全局配置项,需改为小写配置绑定到Celery实例:

  1. 将CELERY_TIMEZONE改为timezone
  2. 将对应内容接收配置改为accept_content
    配置示例如下:
# 旧的Django settings配置写法(已废弃)
CELERY_TIMEZONE = 'Asia/Shanghai'
CELERY_ACCEPT_CONTENT = ['json']

# 新写法,在Celery实例初始化文件中配置
from celery import Celery
app = Celery('your_project_name')
app.conf.timezone = 'Asia/Shanghai'
app.conf.accept_content = ['json']

调整后重启Celery worker和beat进程即可消除该警告。

快速验证方案

  • 手动触发一次该定时任务,若手动运行也报错,可直接在任务逻辑中逐行加打印日志定位崩溃位置
  • 若手动运行正常,拉取任务执行时间点的服务器监控数据,确认当时是否有其他进程抢占CPU、内存资源导致worker进程被终止

内容的提问来源于stack exchange,提问作者Sr coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 09:09:03