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上运行时。这会导致一些轻微的行为变化:Future
objects 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.futures
backport) 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
已删除。