Tornado 5.0的新功能¶
2018年3月5日¶
集锦¶
此版本的重点是改进与
asyncio. 在python 3上,IOLoop总是包装在asyncio事件循环,以及asyncio.Future和asyncio.Task被用来代替龙卷风。这意味着基于asyncio可以相对无缝地与使用龙卷风的混合。尽管已采取措施将此更改的中断降至最低,但为了与Tornado 5.0兼容,可能需要对代码进行更改,详情见下一节。Tornado 5.0支持python 2.7.9+和3.4+。python 2.7和3.4被弃用,对它们的支持将在tornado 6.0中删除,这将需要python 3.5+。
向后兼容性说明¶
不再支持python 3.3。
在
ssl不再支持模块更新。(Thessl模块在版本2.7.9中进行了更新,尽管在某些发行版中,更新出现在版本号较低的版本中。龙卷风需要ssl.SSLContext,ssl.create_default_context和ssl.match_hostname)由于3.5.2之前的python 3.5版本中的异步迭代器协议发生了变化,因此不再支持该版本。
这个
trollius项目 (asyncio不再支持后端口到python 2)。tornado.concurrent.Future现在是的别名asyncio.Future在python 3上运行时。这会导致一些轻微的行为变化:Futureobjects can only be created while there is a currentIOLoop按计划的回调时间
Future.add_done_callback改变了。tornado.concurrent.future_add_done_callback可以用来使行为更像旧版的龙卷风(但不完全相同)。其中一些更改也出现在tornado.concurrent.Future以最小化python 2和3之间的差异。现在部分支持取消,通过
asyncio.Future.cancel. 取消的Future无法再拥有其结果集。处理的应用程序Future直接使用的对象tornado.concurrent.future_set_result_unless_cancelled. 在本机协程中,取消将导致在协程中引发异常。这个
exc_info和set_exc_info方法不再存在。使用tornado.concurrent.future_set_exc_info替换后者,并用result取代前者。
io_loop许多Tornado函数的参数已被删除。使用IOLoop.current()而不是传球IOLoop对象。在Python 3上,
IOLoop总是包装在asyncio事件循环。IOLoop.configure在python 3上被有效地删除(为了兼容性,可以调用它来冗余地指定asyncio背衬的IOLoop)IOLoop.instance现在是的不推荐使用的别名IOLoop.current. 需要跨线程通信行为的应用程序IOLoop.instance应该使用它们自己的全局变量。
其他注记¶
The
futures(concurrent.futuresbackport) package is now required on Python 2.7.这个
certifi和backports.ssl-match-hostname在python 2.7上不再需要包。建议使用python 3.6或更高版本,因为它具有更高效的垃圾收集功能
asyncio.Future物体。
tornado.auth¶
GoogleOAuth2Mixin现在使用一组新的URL。
tornado.autoreload¶
在python 3上,使用
__main__.__spec为了更可靠地重建原始命令行并避免修改PYTHONPATH.这个
io_loop参数tornado.autoreload.start已删除。
tornado.concurrent¶
tornado.concurrent.Future现在是的别名asyncio.Future在python 3上运行时。有关更多信息,请参阅“向后兼容性说明”。设置的结果
Future运行回调时不再阻塞。相反,回调计划在下一个IOLoop迭代。不推荐使用的别名
tornado.concurrent.TracebackFuture已删除。tornado.concurrent.chain_future现在与所有三种Futures(龙卷风,asyncio和concurrent.futures)这个
io_loop参数tornado.concurrent.run_on_executor已删除。新功能
future_set_result_unless_cancelled,future_set_exc_info和future_add_done_callback帮助掩盖两者之间的差异asyncio.Future龙卷风的前世Future实施。
tornado.curl_httpclient¶
改进了Python3上的调试日志记录。
这个
time_info响应属性现在包括appconnect除了其他测量。关闭一个
CurlAsyncHTTPClient现在中断可能延迟垃圾收集的循环引用。这个
io_loop论据CurlAsyncHTTPClient已删除构造函数。
tornado.gen¶
tornado.gen.TimeoutError现在是的别名tornado.util.TimeoutError.泄漏检测
Futures由这个模块创建的现在将它们属性为正确的调用者,而不是协程机制。几个可能延迟垃圾收集的循环引用已被破坏。
在Python 3上,
asyncio.Task是用来代替龙卷风连体衣。这提高了与某些asyncio库和添加对取消的支持。这个
io_loop论据YieldFuture和with_timeout已被删除。
tornado.httpclient¶
这个
io_loop对所有人的论证AsyncHTTPClient已删除构造函数。
tornado.httpserver¶
现在客户端可以在发送分块请求后重用连接。
如果客户机发送了一个格式错误的请求,服务器现在会以400错误响应,而不是简单地关闭连接。
Content-Length和Transfer-Encoding不再发送带有1xx或204个响应的头(这在304个响应中是正确的)。当关闭到HTTP/1.1客户端的连接时,
Connection: close消息头与响应一起发送。这个
io_loop论据HTTPServer已删除构造函数。如果不止一个
X-Scheme或X-Forwarded-Proto头存在,只使用最后一个。
tornado.httputil¶
的字符串表示形式
HTTPServerRequest对象(有时在日志消息中使用)不再包含请求头。新功能
qs_to_qsl转换的结果urllib.parse.parse_qs以命名值对。
tornado.ioloop¶
tornado.ioloop.TimeoutError现在是的别名tornado.util.TimeoutError.IOLoop.instance现在是的不推荐使用的别名IOLoop.current.这个
IOLoop.initialized方法已被删除。在python 3上,
asyncio背衬的IOLoop总是被使用和替代IOLoop无法配置实现。IOLoop.current以及相关方法传递给asyncio.get_event_loop.run_sync在超时时取消其参数。这会在本机协程中产生更好的堆栈跟踪(并避免有关泄漏的日志消息)。新方法
IOLoop.run_in_executor和IOLoop.set_default_executor使从本机协程在其他线程中运行函数更容易(因为concurrent.futures.Future不支持await)这个
io_loop参数PeriodicCallback已删除。现在可以创建
PeriodicCallback在一个线程中,在另一个线程中启动它,而不传递显式事件循环。这个
IOLoop.set_blocking_signal_threshold和IOLoop.set_blocking_log_threshold方法不推荐使用,因为它们不是针对asyncio事件循环'.使用PYTHONASYNCIODEBUG=1而是环境变量。IOLoop.clear_current如果在建立任何当前循环之前调用它,现在就可以工作了。
tornado.iostream¶
这个
io_loop论据IOStream已删除构造函数。新方法
BaseIOStream.read_into提供最小副本替代BaseIOStream.read_bytes.BaseIOStream.write对于非常大量的数据来说,现在效率更高。修正了一些情况
IOStream.error可能不准确。写一篇
memoryview无法再导致“BufferError:现有数据导出:对象无法重新调整大小”。
tornado.locks¶
作为
Future更改时,总是异步通知等待者Condition.notify.
tornado.netutil¶
默认值
Resolver现在使用IOLoop.run_in_executor.ExecutorResolver,BlockingResolver和ThreadedResolver被贬低。这个
io_loop论据add_accept_handler,ExecutorResolver和ThreadedResolver已被删除。add_accept_handler返回可调用的,可用于删除添加的所有处理程序。OverrideResolver现在接受每个族的覆盖。
tornado.options¶
现在可以正确检测重复的选项名,不管它们是使用连字符还是下划线。
tornado.platform.asyncio¶
AsyncIOLoop和AsyncIOMainLoop现在在适当时自动使用;不再建议显式引用它们。启动一个
IOLoop或使其成为当前状态也会设置asyncio当前线程的事件循环。关闭一个IOLoop关闭相应的asyncio事件循环。to_tornado_future和to_asyncio_future已弃用,因为它们现在没有操作。AnyThreadEventLoopPolicy现在可以轻松地允许在任何线程上创建事件循环(类似于Tornado以前的策略)。
tornado.platform.caresresolver¶
这个
io_loop参数CaresResolver已删除。
tornado.platform.twisted¶
这个
io_loop论据TornadoReactor,TwistedResolver和tornado.platform.twisted.install已被删除。
tornado.process¶
这个
io_loop论据Subprocess构造函数和Subprocess.initialize已删除。
tornado.routing¶
如果找不到请求的委托,则会生成默认404响应。
tornado.simple_httpclient¶
这个
io_loop参数SimpleAsyncHTTPClient已删除。TLS现在配置依据
ssl.create_default_context默认情况下。
tornado.tcpclient¶
这个
io_loop论据TCPClient已删除构造函数。TCPClient.connect有新的timeout争论。
tornado.tcpserver¶
tornado.testing¶
被蔑视的
tornado.testing.get_unused_port和tornado.testing.LogTrapTestCase已被删除。AsyncHTTPTestCase.fetch现在支持绝对URL。AsyncHTTPTestCase.fetch现在连接到127.0.0.1而不是localhost对错误的ipv6配置更强大。
tornado.util¶
tornado.util.TimeoutError替换tornado.gen.TimeoutError和tornado.ioloop.TimeoutError.Configurable现在支持在继承层次结构的多个级别进行配置。
tornado.web¶
RequestHandler.set_status不再要求给定的状态代码出现在http.client.responses.不再允许发送带有1xx或204响应的正文。
异常处理现在会中断可能延迟垃圾收集的引用循环。
RedirectHandler现在,将请求中的所有查询参数复制到重定向位置。如果两者
If-None-Match和If-Modified-Since请求中存在邮件头StaticFileHandler,后者现在被忽略。
tornado.websocket¶
C加速器现在一次操作多个字节以提高性能。
具有无效WebSocket头的请求现在得到状态代码为400的响应,而不是关闭的连接。
WebSocketHandler.write_message现在提出WebSocketClosedError如果在写入过程中连接关闭。这个
io_loop参数websocket_connect已删除。