解决Python3.8运行tornado项目报NotImplementedError错误
今天拉了一个使用了tornado的项目在本地跑,按照源码作者的步骤配置完,运行,直接报错了,要求环境Python3.6+,我装的是Python3.8,理论上应该直接正常运行的,报错信息:
Traceback(mostrecentcalllast):
File"ice_server.py",line150,in
RunServer.run_server(port=p,host=h)
File"ice_server.py",line125,inrun_server
tornado_server.start()
File"D:\PycharmProjects\ice\venv\lib\site-packages\tornado\tcpserver.py",line244,instart
self.add_sockets(sockets)
File"D:\PycharmProjects\ice\venv\lib\site-packages\tornado\tcpserver.py",line165,inadd_sockets
self._handlers[sock.fileno()]=add_accept_handler(
File"D:\PycharmProjects\ice\venv\lib\site-packages\tornado\netutil.py",line279,inadd_accept_handler
io_loop.add_handler(sock,accept_handler,IOLoop.READ)
File"D:\PycharmProjects\ice\venv\lib\site-packages\tornado\platform\asyncio.py",line100,inadd_handler
self.asyncio_loop.add_reader(fd,self._handle_events,fd,IOLoop.READ)
File"C:\Users\huan\AppData\Local\Programs\Python\Python38\lib\asyncio\events.py",line501,inadd_reader
raiseNotImplementedError
NotImplementedError
一番谷歌原来对于这个问题tornado的参与者们已经收到了很多反馈,有个回复里这么说:
Python3.8asyncioisgoingtomakethe"proactor"eventloopthedefault,insteadofthecurrent"selector"eventloop.ThisisaproblemforTornadobecausetheproactoreventloopdoesn'tsupporttheunix-styleadd_readerAPIsthatTornadouses.
AnyoneusingTornado5+onwindowswithpython3.8willneedtoconfigureasynciotousetheselectoreventloop;we'llhavetodocumentthis.Weshouldalsotrytodetecttheuseofaproactoreventloopandgiveaclearerrormessage
大概意思Python3.8的asyncio改变了循环方式,因为这种方式在windows上不支持相应的add_readerAPIs,就会抛出NotImplementedError错误。
解决办法
找到这个项目使用的python环境的lib\site-packages,做下面的修改,在path-to-python\lib\site-packages\tornado\platform\asyncio.py开头添加代码:
importsys ifsys.platform=='win32': asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
这样就可以正常运行了。
总结
到此这篇关于Python3.8运行tornado项目报NotImplementedError错误的文章就介绍到这了,更多相关Python3.8运行tornado项目报错内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。