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

 更新时间:2020年09月02日 11:45:47   作者:行星带  
这篇文章主要介绍了Python3.8运行tornado项目报NotImplementedError错误,本文给大家分享解决方法,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

今天拉了一个使用了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制作自动推送微信消息提醒的备忘录功能

    这篇文章主要介绍了使用Python制作自动推送微信消息提醒的备忘录功能,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友参考下吧
    2018-09-09
  • PyQT实现多窗口切换

    PyQT实现多窗口切换

    这篇文章主要为大家详细介绍了PyQT实现多窗口切换的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • pytorch加载自己的图片数据集的2种方法详解

    pytorch加载自己的图片数据集的2种方法详解

    数据预处理在解决深度学习问题的过程中,往往需要花费大量的时间和精力,下面这篇文章主要给大家介绍了关于pytorch加载自己的图片数据集的2种方法,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • Python字符集和字符编码详情

    Python字符集和字符编码详情

    这篇文章主要介绍了Python字符集和字符编码详情,Python中的字符串是通过unicode来表示的,在底层对应的结构体是PyUnicodeObject,但是具体为什么呢?带着疑问一起学习下面文章内容吧
    2022-05-05
  • python使用multiprocessing模块实现带回调函数的异步调用方法

    python使用multiprocessing模块实现带回调函数的异步调用方法

    这篇文章主要介绍了python使用multiprocessing模块实现带回调函数的异步调用方法,实例分析了multiprocessing模块异步调用的相关使用技巧,需要的朋友可以参考下
    2015-04-04
  • Python线程之线程安全的队列Queue

    Python线程之线程安全的队列Queue

    这篇文章主要介绍了Python线程之线程安全的队列,是否有一种神器,能解决线程/并发的问题呢?它就是队列Queue,下面进入文章和小编学习Queue的相关资料吧
    2022-02-02
  • Python continue语句实例用法

    Python continue语句实例用法

    在本篇文章里小编给大家整理了关于Python continue语句实例用法,有需要的朋友们可以跟着学习下。
    2020-02-02
  • Python基础请求库urllib模块使用深入探究

    Python基础请求库urllib模块使用深入探究

    在Python中,urllib库是一个强大的模块,用于处理URLs,它包含了多个子模块,其中urllib.request是用于发出HTTP请求的核心组件,本文将深入探讨urllib的基本使用、高级功能以及一些实际场景的示例,方便更全面地了解这个重要的网络请求工具
    2024-01-01
  • 利用python为PostgreSQL的表自动添加分区

    利用python为PostgreSQL的表自动添加分区

    这篇文章主要介绍了利用python为PostgreSQL的表自动添加分区,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • python环境功能强大的pip-audit安全漏洞扫描工具

    python环境功能强大的pip-audit安全漏洞扫描工具

    这篇文章主要为大家介绍了python环境中功能强大的pip-audit安全漏洞扫描工具的功能介绍及安装使用说明,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2022-02-02

最新评论