解决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压缩文件夹内所有文件为zip文件的方法
Jun 20 Python
numpy中的高维数组转置实例
Apr 17 Python
用Python和WordCloud绘制词云的实现方法(内附让字体清晰的秘笈)
Jan 08 Python
Python 实现的 Google 批量翻译功能
Aug 26 Python
执行Django数据迁移时报 1091错误及解决方法
Oct 14 Python
Django 实现Admin自动填充当前用户的示例代码
Nov 18 Python
python实现图片插入文字
Nov 26 Python
python jenkins 打包构建代码的示例代码
Nov 29 Python
浅析Python迭代器的高级用法
Jul 16 Python
Python中常用的os操作汇总
Nov 05 Python
python+opencv3.4.0 实现HOG+SVM行人检测的示例代码
Jan 28 Python
解决IDEA翻译插件Translation报错更新TTK失败不能使用
Apr 24 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
打造计数器DIY三步曲(中)
2006/10/09 PHP
文件上传程序的全部源码
2006/10/09 PHP
php 静态化实现代码
2009/03/20 PHP
8个PHP程序员常用的功能汇总
2014/12/18 PHP
关于laravel模板中生成URL的几种模式总结
2019/10/18 PHP
javascript创建数组之联合数组的使用方法示例
2013/12/26 Javascript
node.js中的console用法总结
2014/12/15 Javascript
JS组件Bootstrap按钮组与下拉按钮详解
2016/05/10 Javascript
js实现简单的碰壁反弹效果
2016/08/30 Javascript
JavaScript使用delete删除数组元素用法示例【数组长度不变】
2017/01/17 Javascript
如何快速上手Vuex
2017/02/14 Javascript
JQueryMiniUI按照时间进行查询的实现方法
2017/06/07 jQuery
JS利用正则表达式实现简单的密码强弱判断实例
2017/06/16 Javascript
js 图片转base64的方式(两种)
2018/04/24 Javascript
JavaScript插入排序算法原理与实现方法示例
2018/08/06 Javascript
js 根据对象数组中的属性进行排序实现代码
2019/09/12 Javascript
Webpack按需加载打包chunk命名的方法
2019/09/22 Javascript
vue vant Area组件使用详解
2019/12/09 Javascript
vue实现购物车选择功能
2020/01/10 Javascript
vue基础知识--axios合并请求和slot
2020/06/04 Javascript
vue flex 布局实现div均分自动换行的示例代码
2020/08/05 Javascript
vue自定义指令限制输入框输入值的步骤与完整代码
2020/08/30 Javascript
Vue实现Header渐隐渐现效果的实例代码
2020/11/05 Javascript
基于ajax实现上传图片代码示例解析
2020/12/03 Javascript
python中Flask框架简单入门实例
2015/03/21 Python
python代码 if not x: 和 if x is not None: 和 if not x is None:使用介绍
2016/09/21 Python
python实现决策树分类(2)
2018/08/30 Python
对pandas中两种数据类型Series和DataFrame的区别详解
2018/11/12 Python
python学生管理系统
2019/01/30 Python
迪卡侬印度官网:购买所有体育用品
2017/06/24 全球购物
Vans荷兰官方网站:美国南加州的原创极限运动潮牌
2018/01/23 全球购物
SQL Server笔试题
2012/01/10 面试题
11月红领巾广播稿
2014/01/17 职场文书
社区助残日活动总结
2014/08/29 职场文书
基于Go语言构建RESTful API服务
2021/07/25 Golang
JavaScript声明变量和数据类型的转换
2022/04/12 Javascript