问题出现:
环境:python3.10 celery5.2 windows10系统
在终端运行celery,使用指令:celery -A celery_tasks worker -P eventlet -l info出现typeerror。
看了好几个解答都说是python版本太低的原因,可以回退使用的包,如重新pip install celery==5.0 ,或者更新python版本解决,但我的版本应该是在使用范围内的。
解决方案:
由于是版本区别,python的某个库使用了NoReturn,导致版本间不兼容,所以直接去对应的python模块文件中,找到使用NoReturn作为类型参数的函数,将其改成None即可。
如,本人的报错:
File "e:\programdata\anaconda3\lib\site-packages\redis\asyncio\client.py", line 744, in PubSub
def close(self) -> Awaitable[NoReturn]:
File "e:\programdata\anaconda3\lib\typing.py", line 251, in inner
return func(*args, **kwds)
File "e:\programdata\anaconda3\lib\typing.py", line 626, in __getitem__
params = tuple(_type_check(p, msg) for p in params)
File "e:\programdata\anaconda3\lib\typing.py", line 626, in <genexpr>
params = tuple(_type_check(p, msg) for p in params)
File "e:\programdata\anaconda3\lib\typing.py", line 135, in _type_check
raise TypeError(f"Plain {arg} is not valid as type argument")
TypeError: Plain typing.NoReturn is not valid as type argument
将上述对应的 Awaitable[NoReturn]改为 Awaitable[None]即可
这个愚蠢的问题居然耗费了我几个小时,被自己笨死。