Celery入坑记录
1. 前言
最近需要用到Celery,初步学习了一下,但是遇到了一些问题,被搞的心力交瘁。。。,在此记录下。
环境说明:win11 + python3.11 + celery5.2.7 + redis
2. 问题
2.1 学习文档的选择
刚开始在Eege直接搜索celery结果排在最前面的是10年前的介绍文档(挺像官方的)XXX, 还点了进去看了半天,虽然和官方文档内容很像,但是还是有很多细节不一样,结果导致了一些问题,下次一定得看清楚日期,版本号这些。
2.2 celery启动报错:Fatal Python error: init_import_site: Failed to import the site module。。。。
执行以下命令后报错: celery -A celery_task worker --loglevel=INFO
错误截图:
1
2
原因分析: 具体原因可能是python的环境导致的,但学浅不太弄的清楚
解决: 在配置celery参数时参数名称需要小写,celery比较新的版本已经更新参数名称了
点击查看代码
from celery import Celery
celery_app = Celery('celery_task', broker='redis://127.0.0.1:6379/1', backend='redis://127.0.0.1:6379/2')
# 旧的配置方式
celery_app.conf.update(
CELERY_TASK_SERIALIZER='json',
CELERY_ACCEPT_CONTENT=['json'],
CELERY_RESULT_SERIALIZER='json',
CELERY_TIMEZONE='Asia/Shanghai',
CELERY_ENABLE_UTC=True,
)
# 新的配置方式
celery_app.conf.update(
task_serializer='json',
accept_content=['json'],
result_serializer='json',
timezone='Asia/Shanghai',
enable_utc=True ,
)
@celery_app.task
def add(x, y):
print("开始执行了")
return x + y
2.3 在windows下正确启动Celery
启动方式一(有问题): celery -A celery_task worker --loglevel=INFO
现象: 用上述命令在windows下能正常启动,但去调用任务时(delay)任务不会执行,在配置的后端backend存储地址中也没有结果保存,仅在broker的存储位置中会产生两个key (unacked, unacked_index),这两个key应该存储的未被执行的任务信息
启动方式二: celery -A celery_task worker --loglevel=INFO -P eventlet -c 3
说明 好像是celery不支持在windows下运行,需要借助eventlet (pip install即可)
现象: 用上述命令在windows下正常启动后,任务才会被执行,backend中才有结果信息输出
热门相关:超武穿梭 修仙界最后的单纯 特工重生:快穿全能女神 重生当学神,又又又考第一了! 重生当学神,又又又考第一了!