解决在window下 python3.7版本中使用Celery报错(Celery4.x版本也可以实现)

  • Post author:
  • Post category:python


首先说一下,我遇到的问题。

众所周知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)

也许会与原文章有所出入,大家有不明白的地方可以参考原文。



版权声明:本文为apple_sir_bai原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。