Celery启动光标闪烁无ready提示 任务执行无成功消息异常解决
Celery服务启动卡住、任务执行无日志无返回值故障排查
故障表现
- 服务启动加载阶段光标持续闪烁,始终不输出正常的
ready就绪提示 - 触发任务后,任务函数内部逻辑可正常运行(已通过函数内
print语句验证执行流程),但Celery端不会输出常规的带执行耗时的任务成功提示,函数返回值也无法被Celery正常接收
现有代码与配置
celery.py 配置文件
from __future__ import absolute_import, unicode_literals import os from celery import Celery os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'ontym.settings') app = Celery('ontym') app.config_from_object('django.conf:settings', namespace='CELERY') app.autodiscover_tasks()
tasks.py 任务文件
from celery import shared_task @shared_task def hello_task(name): print("hello from task",name)
解决方案
按优先级依次排查修复:
补全Django集成Celery的必要导入
检查与settings.py同路径的项目同名目录下的__init__.py文件,添加如下代码,缺少该配置会导致Celery app无法被Django正确加载,出现启动加载卡住的问题:from .celery import app as celery_app __all__ = ('celery_app',)适配运行环境调整启动参数
Windows环境下运行Celery 4.x及以上版本时,默认的prefork进程池存在已知兼容问题,会直接导致启动无就绪提示、任务日志缺失、返回值无法回收,启动时需指定兼容的进程池:- 单进程调试模式启动命令:
celery -A ontym worker -l info --pool=solo - 需要并发支持时,先安装eventlet依赖:
pip install eventlet,再用如下命令启动:celery -A ontym worker -l info --pool=eventlet
- 单进程调试模式启动命令:
核对核心配置项
检查Django的settings.py文件,确认已正确配置Broker(消息中间件)和Result Backend(结果存储后端),缺少结果后端配置时,会出现任务逻辑正常执行但返回值无法被Celery接收的问题,以Redis作为中间件的最小配置示例(需提前安装redis依赖:pip install redis):CELERY_BROKER_URL = 'redis://127.0.0.1:6379/0' CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/1'开启debug日志定位卡点
以上配置确认无误仍存在问题时,将启动日志级别调整为debug,查看具体加载卡点:celery -A ontym worker -l debug
内容的提问来源于stack exchange,提问作者Practical Bong
相关产品推荐
相关产品推荐

