关于Celery4.x以上在Win10下报错解决办法

报错提示:

ValueError: not enough values to unpack (expected 3, got 0)

顺着代码路径去找源文件,发现是缺少了一个参数,可是摸索半天不知道该传什么。。。
于是把思维转向面向google和面向segmentfault解决问题,最后找到了解决办法:

首先,报一下环境:

系统:win10
python版本:3.6
celery版本:4.0

发现这个问题主要集中在Win10的celery下,一旦运行任务跑worker就会报错,解决办法如下:

一、更换celery版本至4.X以下

目前来看主要是celery4.0以上的版本才出现问题,如果本身项目对版本功能细节不敏感,可以考虑降版本。

二、安装eventlet

用celery4.0主要还是看重它跟django配合,不用再另外继承django-celery,那么就不打算降版本了。可以这样:

pip install eventlet

运行worker的时候加上一个参数:

celery -A xxxx worker -l info -P eventlet

原理:首先要知道eventlet是一个python库,它又这样的功能:一个是处理和网络相关的,另一个可以通过协程实现并发。刚好celery的线程池是支持eventlet扩展的。初步可以判断,在win10下,celery自带的worker池并不能有效释放出任务去执行,那么替换成eventlet就成功了。(至于为什么默认的worker池会出问题,还有待研究)

你可能感兴趣的:(个人心得)