解决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项目报错内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python编程中NotImplementedError的使用方法

    Python编程中raise可以实现报出错误的功能,而报错的条件可以由程序员自己去定制.在面向对象编程中,可以先预留一个方法接口不实现,在其子类中实现. 如果要求其子类一定要实现,不实现的时候会导致问题,那么采用raise的方式就很好. 而此时产生的问题分类是NotImplementedError. 写一段代码如下: class ClassDemo: def test_demo(self): raiseNotImplementedError("my test: not implemented!&

  • Python的Tornado框架的异步任务与AsyncHTTPClient

    高性能服务器Tornado Python的web框架名目繁多,各有千秋.正如光荣属于希腊,伟大属于罗马.Python的优雅结合WSGI的设计,让web框架接口实现千秋一统.WSGI 把应用(Application)和服务器(Server)结合起来.Django 和 Flask 都可以结合 gunicon 搭建部署应用. 与 django 和 flask 不一样,tornado 既可以是 wsgi 应用,也可以是 wsgi 服务.当然,选择tornado更多的考量源于其单进程单线程异步IO的网络模

  • Python的Tornado框架实现图片上传及图片大小修改功能

    图片的上传 上传图片使用了表单提交, 下面是html部分, enctype="multipart/form-data"表示不对字节进行编码,上传文件类型时需指定. input标签的 type="file" 指定上传类型. <form action="/" enctype="multipart/form-data" method="post"> <input type="file&

  • python用装饰器自动注册Tornado路由详解

    第一个版本 在这个版本中,首先创建了 RouterConfig 对象,其构造方法创建了 tornado.web.Application() 并赋值为 self.Application ,在每个 Handler 上添加 @app.route 装饰器,对应的就是 RouterConfig 下面的 route 对象,其中 Handler 实例会被赋值到 handler 参数中,最后把 URL 和 Handler 对应关系添加到路由表中, URL 在每个 Handler 中创建的属性. #!/usr/b

  • 使用基于Python的Tornado框架的HTTP客户端的教程

    由于tornado内置的AsyncHTTPClient功能过于单一, 所以自己写了一个基于Tornado的HTTP客户端库, 鉴于自己多处使用了这个库, 所以从项目中提取出来, 写成一个单独库 tornadohttpclient TornadoHTTPClient 是一个基于Tornado的高效的异步HTTP客户端库, 支持Cookie和代理, 目前仅在Python2.7平台上测试过, 不支持Python3 听取了仙子君的意见, 直接对tornado.curl_httpclient.CurlAs

  • Python Web框架Tornado运行和部署

    本文实例为大家分享了Python Web框架Tornado运行和部署的详细内容,供大家参考,具体内容如下 一.运行和部署 因为Tornado内置了自己的HTTPServer,运行和部署它与其他Python web框架不太一样.你需要写一个main()函数来启动服务,而不是配置一个WSGI容器来运行你的应用: def main(): app = make_app() app.listen(8888) IOLoop.current().start() if __name__ == '__main__

  • 解决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

  • BMIDE环境导入项目报编码错误解决方案

    BMIDE导入项目报编码错误 错误# BASE-10001: "编码验证错误"- D:\c8migration_project_tc12000.3.0\c8migration\extensions\migration.xml 行:5076 " description=备注"中找到无效字符.请输入属于以下字符集的文本:"us-ascii". 请参见文档中名为"业务建模器 IDE 故障排除"的部分以获取更多详细信息. 解决办法 浏

  • 解决python3捕获cx_oracle抛出的异常错误问题

    最近一直在用python写点监控oracle的程序,一直没有用到异常处理这一块,然后日常监控中一些错误笼统的抛出数据库连接异常,导致后续处理的时候无法及时定位问题. 于是早上抽点时间看了下python3关于cx_oracle的异常处理形式. 其实,我只是想在python抛出oracle错误的时候,捕获到具体ora-信息. 写法很简单,这里记录下,以备后用. try: oracle_check(dbname) except cx_Oracle.DatabaseError as msg: print

  • Eclipse运行android项目报错Unable to build: the file dx.jar was not loaded from the SDK folder的解决办法

    由于最近通过SDK-Manager更新了build-tools,当要用到dx.jar这个包时,自动调用最新build-tools中dx.jar,但是运行Android项目时Console却提示: Failed to load C:\Program Files (x86)\android\android-sdk\build-tools\26.0.0-preview\lib\dx.jar Unable to build: the file dx.jar was not loaded from the

  • 解决Navicat for MySQL 连接 MySQL 报2005错误的问题

    上篇文章给大家介绍过解决Navicat for Mysql连接报错1251的问题(连接失败),今天介绍Navicat for MySQL 连接 MySQL 报2005错误的问题. 关于Navicat for MySQL 连接 MySQL 报2005 -Unknown MySQL server host 'localhost'(0)错误的情况与解决方法 2005报错原因: 在本地MySQL的服务启动后,由于Navicat的一些功能需要联网才可以使用,由于报错提示说连接不上主机的localhost,

  • 解决webpack -p压缩打包react报语法错误的方法

    前言 最近在用webpack打包react代码的时候发现一个问题,做一个处理总结分享出来给大家,下面来一起看看详细的介绍: 我的webpack配置: var webpack = require('webpack'); //打包less插件 var ExtractTextPlugin = require('extract-text-webpack-plugin'); //这里的'./css/bundle.css'设置打包地址 var ExtractLess = new ExtractTextPlu

  • IIS7使用.NET Framework v4.0运行库报500错误的解决办法

    故障说明:1)Windows Server 2008 R2环境下安装的IIS7.52)安装.Net4.53)运行网站,报500错误:检查了webconfig等代码,没有问题 解决办法:重新注册.Net4.5,过程如下:一.开始,查找框中输入cmd字眼,然后出现cmd.exe应用程序二.cmd.exe上右键,选择用管理员身份来运行. 三.往命令行窗口中粘贴以下命令,回车,完成注册. 复制代码 代码如下: "%WINDIR%\Microsoft.NET\Framework\v4.0.30319\as

  • 解决pyinstaller打包运行程序时出现缺少plotly库问题

    用pyinstaller打包tkinter程序,打包后运行exe是报如下错误: 搜索一阵发现是pyinstaller在打包的时候(StartRun.py我要打包的主程序文件)可能会漏掉一些三方库,就在打包的时候加上三方库的绝对路径: pyinstaller StartRun.py -F -p C:\Python36\Lib\site-packages 发现打包完之后还是会报以上问题,继续搜索后用添加hook文件的方式可以解决(彻底解决了我的问题),修改方法: 1.找到C:\Python36\Li

  • 解决python3运行selenium下HTMLTestRunner报错的问题

    修改HTMLTestRunner.py以支持python3+ 搜索到的结果整理 修改一: 在python shell里输入 >>>import HTMLTestRunner >>> dir(HTMLTestRunner) 发现不认识StringIO (No module named StringIO) 确实3里面没有这个了,第94行引入的名称要改,改成import io,539行要改成self.outputBuffer = io.BytesIO() 修改二: 运行程序的

  • 解决python3中自定义wsgi函数,make_server函数报错的问题

    #coding:utf-8 from wsgiref.simple_server import make_server def RunServer(environ, start_response): start_response('200 OK', [('Content-Type', 'text/html')]) return '<h1>Hello, web!</h1>' if __name__ == '__main__': httpd = make_server('localho

随机推荐