背景
之前使用Flask + Celery + Redis
来实现异步队列处理,使用的环境是python3.6
,后来由于Mac系统下,使用brew
安装的python
,直接升级到了python3.7
,相同的程序运行就报错了。
问题
报错情况提示如下:
1 | [2019-01-08 23:15:05,188: CRITICAL/MainProcess] Unrecoverable error: SyntaxError('invalid syntax', ('/Users/zhengk/.local/share/virtualenvs/ToRandom-3HChPPPT/lib/python3.7/site-packages/celery/backends/redis.py', 22, 19, 'from . import async, base\n')) |
结论
这个错误有点奇怪,经过一番百度谷歌,终于发现问题的原因。由于celery
中有一个文件名命名为async
,而在python3.7
中,新增两个关键字,其中一个恰好就是async
,另一个是await
。
https://docs.python.org/3/whatsnew/3.7.html
celery
的作者也在issue
中表示,后续版本会将async
这个文件改为asynchronous
,但目前版本还未发布(可能会在4.2.2)。现在可以通过github
直接安装新版,pipenv
环境下安装如下:
1 | pipenv install https://github.com/celery/celery/tarball/master |
https://github.com/celery/celery/issues/4849
拓展
flask + celery + redis
的单文件和工厂模式demo可参考如下git:
https://github.com/keejo125/flask_celery_redis_demo