翼度科技»论坛 编程开发 python 查看内容

Celery入坑记录

9

主题

9

帖子

27

积分

新手上路

Rank: 1

积分
27
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比较新的版本已经更新参数名称了
点击查看代码
  1. from celery import Celery
  2. celery_app = Celery('celery_task', broker='redis://127.0.0.1:6379/1', backend='redis://127.0.0.1:6379/2')
  3. # 旧的配置方式
  4. celery_app.conf.update(
  5.     CELERY_TASK_SERIALIZER='json',
  6.     CELERY_ACCEPT_CONTENT=['json'],
  7.     CELERY_RESULT_SERIALIZER='json',
  8.     CELERY_TIMEZONE='Asia/Shanghai',
  9.     CELERY_ENABLE_UTC=True,
  10. )
  11. # 新的配置方式
  12. celery_app.conf.update(
  13.     task_serializer='json',
  14.     accept_content=['json'],
  15.     result_serializer='json',
  16.     timezone='Asia/Shanghai',
  17.     enable_utc=True ,
  18. )
  19. @celery_app.task
  20. def add(x, y):
  21.     print("开始执行了")
  22.     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中才有结果信息输出


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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具