Skip to main content

Tornado 4.3中的新功能

2015年11月6日

强调

  • 支持在Python 3.5中的新的async/await关键字。在大多数情况下,async def 可以用来代替 @gen.coroutine 装饰器。在用 async def 定义的函数内部,使用 await 而不是 yield 等待异步操作。使用async/await定义的协程将比使用 @gen.coroutineyield 定义的协议更快,但不支持某些功能,包括 Callback/Wait 或产生Twisted Deferred 的能力。有关更多信息,请参阅 用户指南

  • 在使用旧版本的Python中的Cython进行编译时,async/await关键字也可用。

弃用通知

  • 这将是Tornado支持Python 2.6或3.2的最后一个版本。请注意,PyPy3将继续被支持,即使它实现了Python 3.2和3.3特性的混合。

安装

  • Tornado有几个新的依赖:ordereddict 在Python 2.6,singledispatch 在3.4之前的所有Python版本(这是在Tornado的早期版本的一个可选依赖,并且现在是强制性的),并且所有版本的 backports_abc>=0.4 在3.5之前。这些依赖关系将在使用 pipsetup.py install 安装时自动安装。在Google App Engine上运行时,不需要这些依赖关系。

  • 二进制轮提供Python 3.5在Windows(32和64位)。

tornado.auth

  • 新方法 OAuth2Mixin.oauth2_request 可用于使用访问令牌进行经身份验证的请求。

  • 现在兼容与Cython编译的回调。

tornado.autoreload

  • 修复了autoreload命令行包装器的问题,其中导入将被不正确地解释为相对。

tornado.curl_httpclient

  • 固定解析多行标头。

  • allow_nonstandard_methods=True 现在绕过身体健康检查,与 simple_httpclient 中的方式相同。

  • PATCH 方法现在允许没有 allow_nonstandard_methods=True 的身体。

tornado.gen

  • WaitIterator 现在支持在Python 3.5上的 async for 语句。

  • @gen.coroutine 可以应用于使用Cython编译的函数。在3.5之前的python版本上,必须为此功能安装 backports_abc 程序包。

  • Multimulti_future 已被弃用,并被统一的函数 multi 取代。

tornado.httpclient

tornado.httpserver

  • 包含 Content-LengthTransfer-Encoding 的请求将被视为错误。

tornado.httputil

tornado.ioloop

  • IOLoop(make_current=True) 现在按预期工作,而不是提出异常。

  • 当退出时,Twisted和asyncio IOLoop实现现在清除 current(),就像标准的IOLoops。

  • IOLoop.add_callback 在单线程情况下更快。

  • 当在闭合的IOLoop上调用时,IOLoop.add_callback 不再引发错误,但不会调用回调。

tornado.iostream

  • IOStream 的协同式使用现在将大多数错误转换为 StreamClosedError,这具有减少来自应用程序控制之外的异常(特别是SSL错误)的日志噪声的效果。

  • StreamClosedError 现在有一个 real_error 属性,它指示流被关闭的原因。它与 IOStreamerror 属性相同,但可能比 IOStream 本身更容易访问。

  • 改进了 read_until_close 中的错误处理。

  • 当对SSL服务器进行端口扫描时,日志记录的噪声较少。

  • EINTR 现在处理所有读。

tornado.locale

tornado.locks

  • LockSemaphore 现在支持关于Python 3.5的 async with 语句。

tornado.log

  • 新的基于时间的日志循环模式可用于 --log_rotate_mode=time--log-rotate-whenlog-rotate-interval

tornado.netutil

  • bind_sockets 现在支持带有 reuse_port=True 参数的 SO_REUSEPORT

tornado.options

  • 破折号和下划线现在可在选项名称中完全互换。

tornado.queues

  • Queue 现在支持在Python 3.5上的 async for 语句。

tornado.simple_httpclient

  • 当跟踪重定向时,streaming_callbackheader_callback 将不再在重定向响应上运行(只有最终的非重定向)。

  • 包含 Content-LengthTransfer-Encoding 的响应将被视为错误。

tornado.template

  • tornado.template.ParseError 现在包括除了行号之外的文件名。

  • 空白处理已变得更加可配置。 Loader 构造函数现在有一个 whitespace 参数,有一个新的 template_whitespace Application 设置,并有一个新的 {% whitespace %} 模板伪指令。所有这些选项都采用 tornado.template.filter_whitespace 函数中定义的模式名称。默认模式是 single,这与以前版本的Tornado的行为相同。

  • 现在支持非ASCII文件名。

tornado.testing

  • ExpectLog 对象现在具有布尔 logged_stack 属性,以便更容易测试是否记录了异常堆栈跟踪。

tornado.web

  • 每个传出头的4000个字节的硬限制已被删除。

  • StaticFileHandler 返回具有 .gz.bz2.xz 扩展名的文件的正确 Content-Type

  • 小于1000字节的响应将不再被压缩。

  • 默认的gzip压缩级别现在是6(was 9)。

  • 修正了在Tornado 4.2.1打破 StaticFileHandler/path 的回归。

  • tornado.web.HTTPError 现在可与 copy 模块一起复制。

  • 异常 Finish 现在接受将传递给方法 RequestHandler.finish 的参数。

  • 新的 Application 设置 xsrf_cookie_kwargs 可用于在XSRF cookie上设置其他属性,例如 securehttponly

  • Application.listen 现在返回它创建的 HTTPServer

tornado.websocket

  • 当启用压缩时固定处理连续帧。