首先说一下,我遇到的问题。
众所周知windows系统下,python 中使用 Celery,4.x版本已经不能使用,所以需要去下载版本低于它的celery包。但是苦逼的是我python是3.7版本,即便使用3.x版本依然会报错。
于是疯狂百度寻找答案,最终在两位大佬的博文中得到解决方法。以下是两位大佬博文的链接,我将他们所说的,综合说明一下。
原文链接:https://www.jianshu.com/p/957d7be42058
原文链接:https://blog.csdn.net/qq_30242609/article/details/79047660
1.安装最新版本的Celery
在python3.7版本中无论使用哪个Celery版本都会报错
原因:在python3.7+的版本中,将async变量名成为了关键词
开发人员已经处理了这个issue,合并了master,快速的解决方案是通过github安装celery,命令如下:
pip install –upgrade https://github.com/celery/celery/tarball/master
我们去从github上下载最新的Celery,安装的过程可能会非常的慢,我们可以使用镜像源去安装
pip install –upgrade https://github.com/celery/celery/tarball/master -i 镜像源
清华:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
华中理工大学:http://pypi.hustunique.com/
山东理工大学:http://pypi.sdutlinux.org/
豆瓣:http://pypi.douban.com/simple/
2. 需要下载eventlet包
Celery ValueError: not enough values to unpack (expected 3, got 0)
因为win10上运行celery4.x就会出现这个问题,虽然你能将celery服务器开起来,但是一旦接收任务就会报错,解决办法如下
pip install eventlet
然后启动worker的时候加一个参数 -P eventlet,如下:
celery -A worker -l info -P eventlet
然后就可以正常的调用了。
3. 补充:接收数据会报错,我们加一句话即可
from celery import Celery
import os
os.environ.setdefault('FORKED_BY_MULTIPROCESSING', '1') # 加上这句话
app = Celery(XXX)
也许会与原文章有所出入,大家有不明白的地方可以参考原文。