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中才有结果信息输出

热门相关:超武穿梭   修仙界最后的单纯   特工重生:快穿全能女神   重生当学神,又又又考第一了!   重生当学神,又又又考第一了!