木鸟 发表于 2023-5-16 18:08:05

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


来源:https://www.cnblogs.com/qiu0000/p/17377315.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: Celery入坑记录