解决Python3.8运行tornado项目报NotImplementedError错误


Posted in Python onSeptember 02, 2020

今天拉了一个使用了tornado的项目在本地跑,按照源码作者的步骤配置完,运行,直接报错了,要求环境Python3.6+,我装的是Python3.8,理论上应该直接正常运行的,报错信息:

Traceback (most recent call last):
  File "ice_server.py", line 150, in <module>
    RunServer.run_server(port=p, host=h)
  File "ice_server.py", line 125, in run_server
    tornado_server.start()
  File "D:\PycharmProjects\ice\venv\lib\site-packages\tornado\tcpserver.py", line 244, in start
    self.add_sockets(sockets)
  File "D:\PycharmProjects\ice\venv\lib\site-packages\tornado\tcpserver.py", line 165, in add_sockets
    self._handlers[sock.fileno()] = add_accept_handler(
  File "D:\PycharmProjects\ice\venv\lib\site-packages\tornado\netutil.py", line 279, in add_accept_handler
    io_loop.add_handler(sock, accept_handler, IOLoop.READ)
  File "D:\PycharmProjects\ice\venv\lib\site-packages\tornado\platform\asyncio.py", line 100, in add_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", line 501, in add_reader
    raise NotImplementedError
NotImplementedError

一番谷歌原来对于这个问题tornado的参与者们已经收到了很多反馈,有个回复里这么说:

Python 3.8 asyncio is going to make the "proactor" event loop the default, instead of the current "selector" event loop. This is a problem for Tornado because the proactor event loop doesn't support the unix-style add_reader APIs that Tornado uses.

Anyone using Tornado 5+ on windows with python 3.8 will need to configure asyncio to use the selector event loop; we'll have to document this. We should also try to detect the use of a proactor event loop and give a clear error message

大概意思Python3.8asyncio改变了循环方式,因为这种方式在windows上不支持相应的add_reader APIs,就会抛出NotImplementedError错误。

解决办法

找到这个项目使用的python环境的lib\site-packages,做下面的修改,在path-to-python\lib\site-packages\tornado\platform\asyncio.py开头添加代码:

import sys

if sys.platform == 'win32':
  asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())

这样就可以正常运行了。

总结

到此这篇关于Python3.8运行tornado项目报NotImplementedError错误的文章就介绍到这了,更多相关Python3.8运行tornado项目报错内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python简单格式化时间的方法【strftime函数】
Sep 18 Python
Python中super函数的用法
Nov 17 Python
Python判断中文字符串是否相等的实例
Jul 06 Python
python读取word文档,插入mysql数据库的示例代码
Nov 07 Python
Python之NumPy(axis=0 与axis=1)区分详解
May 27 Python
Pycharm中import torch报错的快速解决方法
Mar 05 Python
Python读入mnist二进制图像文件并显示实例
Apr 24 Python
django 连接数据库出现1045错误的解决方式
May 14 Python
Python 常用日期处理 -- calendar 与 dateutil 模块的使用
Sep 02 Python
python飞机大战游戏实例讲解
Dec 04 Python
一篇文章带你了解Python和Java的正则表达式对比
Sep 15 Python
Python实现视频中添加音频工具详解
Dec 06 Python
详解python with 上下文管理器
Sep 02 #Python
Python 的 __str__ 和 __repr__ 方法对比
Sep 02 #Python
Python datetime 如何处理时区信息
Sep 02 #Python
浅析python中的del用法
Sep 02 #Python
浅析NumPy 切片和索引
Sep 02 #Python
详解Python 函数参数的拆解
Sep 02 #Python
Python 常用日期处理 -- calendar 与 dateutil 模块的使用
Sep 02 #Python
You might like
递归列出所有文件和目录
2006/10/09 PHP
PHP备份数据库生成SQL文件并下载的函数代码
2012/02/05 PHP
PHP swfupload图片上传的实例代码
2013/09/30 PHP
CI框架封装的常用图像处理方法(缩略图,水印,旋转,上传等)
2016/11/22 PHP
Laravel 加载第三方类库的方法
2018/04/20 PHP
使两个iframe的高度与内容自适应,且相等
2006/11/20 Javascript
js apply/call/caller/callee/bind使用方法与区别分析
2009/10/28 Javascript
jQuery $.each的用法说明
2010/03/22 Javascript
jQuery学习笔记 操作jQuery对象 CSS处理
2012/09/19 Javascript
基于javascript代码实现通过点击图片显示原图片
2015/11/29 Javascript
超实用的javascript时间处理总结
2016/08/16 Javascript
nodejs进阶(6)—连接MySQL数据库示例
2017/01/07 NodeJs
NodeJS实现图片上传代码(Express)
2017/06/30 NodeJs
基于JSONP原理解析(推荐)
2017/12/04 Javascript
关于axios如何全局注册浅析
2018/01/14 Javascript
JavaScript中常见内置函数用法示例
2018/05/14 Javascript
Web安全之XSS攻击与防御小结
2018/12/13 Javascript
微信小程序简单的canvas裁剪图片功能详解
2019/07/12 Javascript
基于vue+echarts数据可视化大屏展示的实现
2020/12/25 Vue.js
[01:06]DOTA2小知识课堂 Ep.02 吹风竟可解梦境缠绕
2019/12/05 DOTA
python查找目录下指定扩展名的文件实例
2015/04/01 Python
[原创]教女朋友学Python(一)运行环境搭建
2017/11/29 Python
Python字典数据对象拆分的简单实现方法
2017/12/05 Python
Python批量生成特定尺寸图片及图画任意文字的实例
2019/01/30 Python
Python实现Singleton模式的方式详解
2019/08/08 Python
python定时任务 sched模块用法实例
2019/11/04 Python
pytorch中的weight-initilzation用法
2020/06/24 Python
浅谈TensorFlow中读取图像数据的三种方式
2020/06/30 Python
python 8种必备的gui库
2020/08/27 Python
Champion官网:美国冠军运动服装
2017/01/25 全球购物
出纳员岗位责任制
2014/02/11 职场文书
《夸父追日》教学反思
2014/02/26 职场文书
管理提升方案
2014/06/04 职场文书
乡镇党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
市场部岗位职责范本
2015/04/15 职场文书
结婚主持人致辞
2015/07/28 职场文书