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实例:
- 将
CELERY_TIMEZONE改为timezone - 将对应内容接收配置改为
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
相关产品推荐
相关产品推荐

