Windows环境下Celery 4.4用eventlet启动报错AttributeError求助
问题排查与解决方案
这个问题我之前也碰到过,根源很明确——Python版本和eventlet版本不兼容,具体原因和解决办法如下:
问题原因
你当前使用的是Python 3.7,而错误日志里提到的os.register_at_fork()方法是Python 3.8及以上版本才新增的API。你的Pipfile里写的是eventlet = "*",这会自动安装eventlet的最新版本(比如0.30+),而这些新版本已经放弃了对Python 3.7的支持,内部用到了只有3.8+才有的os.register_at_fork(),所以启动Celery worker时就抛出了AttributeError。
解决办法
你可以二选一:
方案1:降级eventlet到兼容Python 3.7的版本
修改你的Pipfile,把eventlet的版本指定为0.29.0(这个版本是最后一批支持Python 3.7的eventlet版本):
[packages] eventlet = "==0.29.0" # 其他包保持不变
然后重新安装依赖:
pipenv install
之后再重新启动Celery worker,应该就能正常运行了。
方案2:升级Python版本到3.8及以上
如果条件允许,把你的Python版本升级到3.8或更高版本,这样os.register_at_fork()就会存在,最新版的eventlet也能正常工作。升级后不需要修改Pipfile,直接重新安装依赖即可。
验证测试
修改完后,重新运行你的Celery启动命令:
pipenv run celery worker -A src.celery_app -l info -P eventlet --without-mingle --without-heartbeat --without-gossip -Q queue1 -n worker1
应该不会再出现AttributeError的问题了。
内容的提问来源于stack exchange,提问作者sattva_venu
相关产品推荐
相关产品推荐

