解决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实现递归版汉诺塔示例(汉诺塔递归算法)
Apr 08 Python
Python跳出循环语句continue与break的区别
Aug 25 Python
离线安装Pyecharts的步骤以及依赖包流程
Apr 23 Python
python2.7实现爬虫网页数据
May 25 Python
Python socket实现的简单通信功能示例
Aug 21 Python
对python中的控制条件、循环和跳出详解
Jun 24 Python
Pandas_cum累积计算和rolling滚动计算的用法详解
Jul 04 Python
Python for循环通过序列索引迭代过程解析
Feb 07 Python
python print 格式化输出,动态指定长度的实现
Apr 12 Python
scrapy爬虫:scrapy.FormRequest中formdata参数详解
Apr 30 Python
Django数据统计功能count()的使用
Nov 30 Python
Pytorch 实现变量类型转换
May 17 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
轻松入门: 煮好咖啡的七个诀窍
2021/03/03 冲泡冲煮
PHP5.3.1 不再支持ISAPI
2010/01/08 PHP
PHP模板引擎Smarty内建函数foreach,foreachelse用法分析
2016/04/11 PHP
基于PHP后台的Android新闻浏览客户端
2016/05/23 PHP
PHP实现图片的等比缩放和Logo水印功能示例
2017/05/04 PHP
PHP完全二叉树定义与实现方法示例
2017/10/09 PHP
laravel5.1框架model类查询的实现方法
2019/10/08 PHP
javascript操作table(insertRow,deleteRow,insertCell,deleteCell方法详解)
2013/12/16 Javascript
JS判断两个时间大小的示例代码
2014/01/28 Javascript
jQuery中选择器小问题(新人难免遇到)
2014/03/31 Javascript
JavaScript中undefined和null的区别
2017/05/03 Javascript
JS与jQuery实现ListBox上移,下移,左移,右移操作功能示例
2018/05/31 jQuery
vue.js自定义组件directives的实例代码
2018/11/09 Javascript
js实现旋转木马轮播图效果
2020/01/10 Javascript
Vue实现点击导航栏当前标签后变色功能
2020/08/19 Javascript
vue 虚拟DOM的原理
2020/10/03 Javascript
[46:28]EG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
使用Python绘制图表大全总结
2017/02/11 Python
python构造函数init实例方法解析
2020/01/19 Python
解析pip安装第三方库但PyCharm中却无法识别的问题及PyCharm安装第三方库的方法教程
2020/03/10 Python
基于Python的Jenkins的二次开发操作
2020/05/12 Python
python访问hdfs的操作
2020/06/06 Python
python 利用opencv实现图像网络传输
2020/11/12 Python
CSS3实现简易版的刮刮乐效果
2016/09/27 HTML / CSS
纯CSS3单页切换导航菜单界面设计的简单实现
2016/08/16 HTML / CSS
详解前端HTML5几种存储方式的总结
2016/12/27 HTML / CSS
什么是用户模式(User Mode)与内核模式(Kernel Mode) ?
2015/09/07 面试题
测试工程师岗位职责
2013/11/28 职场文书
打架检讨书100字
2014/01/08 职场文书
计算机专业职业生涯规划范文
2014/01/19 职场文书
学习雷锋做美德少年寄语大全
2014/04/09 职场文书
清明节扫墓活动总结
2015/02/09 职场文书
暑期实践个人总结
2015/03/06 职场文书
CSS 制作波浪效果的思路
2021/05/18 HTML / CSS
springboot 启动如何排除某些bean的注入
2021/08/02 Java/Android
td 内容自动换行 table表格td设置宽度后文字太多自动换行
2022/12/24 HTML / CSS