Tornado 4.0的新功能

2014年7月15日

集锦

  • 这个 tornado.web.stream_request_body decorator允许以有限的内存使用率上载大型文件。

  • 协程现在更快,在龙卷风中被广泛使用。现在返回更多方法 Futures ,包括大多数 IOStream 方法和 RequestHandler.flush .

  • 现在允许许多用户重写的方法返回 Future 用于流量控制。

  • HTTP相关代码现在在 tornado.httpservertornado.simple_httpclienttornado.wsgi 模块,使对chunked和gzip编码等特性的支持更加一致。 HTTPServer 现在使用在中定义的新委托接口 tornado.httputil 除了旧的单一回调接口。

  • 新模块 tornado.tcpclient 创建具有非阻塞DNS、SSL握手和对IPv6支持的TCP连接。

向后兼容性说明

  • tornado.concurrent.Future 不再是线程安全的;使用 concurrent.futures.Future 当需要螺纹安全时。

  • 龙卷风现在取决于 certifi 而不是捆绑自己的Mozilla CA列表副本。使用时将自动安装 pipeasy_install .

  • 此版本包括对版本中首次引入的安全cookie格式的更改。 3.2.1 以及版本中的XSRF令牌更改 3.2.2 . 如果要从早期版本升级,请参阅这些版本的发行说明。

  • 默认情况下,来自其他源站点的WebSocket连接现在被拒绝。若要接受跨源WebSocket连接,请重写新方法 WebSocketHandler.check_origin .

  • WebSocketHandler 不再支持旧的 draft 76 协议(这主要影响Safari 5.x浏览器)。对于这些浏览器,应用程序应该使用非WebSocket解决方案。

  • 备选方案的作者 IOLoop 实现应该看到 IOLoop.add_handler 在此版本中。

  • 这个 RequestHandler.async_callbackWebSocketHandler.async_callback 包装器函数已经被删除;由于堆栈上下文(以及最近的协程),它们已经过时很久了。

  • curl_httpclient 现在至少需要libcurl版本7.21.1和pycurl 7.18.2。

  • 支持 RequestHandler.get_error_html 已被删除;覆盖 RequestHandler.write_error 相反。

其他注记

  • Git存储库已移至https://github.com/tornadoweb/tornado。所有旧链接都应重定向到新位置。

  • announcement mailing list 现在可用。

  • 所有Tornado模块现在都可以导入Google应用程序引擎(尽管应用程序引擎环境不允许 IOLoop 许多模块仍然无法使用)。

tornado.auth

  • 修正了一个错误 .FacebookMixin 在Python 3上。

  • 当使用 Future 接口,异常更可靠地传递给调用方。

tornado.concurrent

tornado.curl_httpclient

  • curl_httpclient 现在沿着http“reason”字符串传入 response.reason .

tornado.gen

  • 协同程序的性能得到了提高。

  • 协程不再产生 StackContexts 默认情况下,但它们将在需要时按需创建。

  • 的内部 tornado.gen 使用时已重写模块以提高性能 Futures 以牺牲老年人的某些性能退化为代价 YieldPoint 接口。

  • 新功能 with_timeout 包裹甲 Future 如果它不能在给定的时间内完成,就会引发异常。

  • 新对象 moment 可以生成以允许IOLoop在恢复前运行一次迭代。

  • Task 现在是返回 Future 而不是 YieldPoint 子类。此更改对应用程序代码应该是透明的,但允许 Task 利用新优化的 Future 处理。

tornado.http1connection

  • 新模块包含由共享的HTTP实现 tornado.httpservertornado.simple_httpclient .

tornado.httpclient

  • 命令行HTTP客户端 (python -m tornado.httpclient $URL )现在在python 3上工作。

  • 修复了内存泄漏 AsyncHTTPClient 关闭影响创建了许多HTTP客户端和IOLoop的应用程序。

  • 新建客户端请求参数 decompress_response 替换现有 use_gzip 参数;两个名称都可以接受。

tornado.httpserver

  • tornado.httpserver.HTTPRequest 已经搬到 tornado.httputil.HTTPServerRequest .

  • HTTP实现已与 tornado.simple_httpclient 在里面 tornado.http1connection .

  • 现在支持 Transfer-Encoding: chunked 请求主体。

  • 现在支持 Content-Encoding: gzip 对于请求主体,如果 decompress_request=True 传递给 HTTPServer 建造师。

  • 这个 connection 属性 HTTPServerRequest 现在记录下来供公众使用;应用程序需要通过 HTTPConnection 接口。

  • 这个 HTTPServerRequest.writeHTTPServerRequest.finish 方法现在已弃用。 (RequestHandler.writeRequestHandler.finishnot 已弃用;这仅适用于 HTTPServerRequest

  • HTTPServer 现在支持 HTTPServerConnectionDelegate 除了旧的 request_callback 接口。委托接口支持请求主体的流式处理。

  • HTTPServer 现在检测应用程序发送 Content-Length 与实际内容不一致的错误。

  • 新建构造函数参数 max_header_sizemax_body_size 允许为请求的不同部分设置单独的限制。 max_body_size 即使在流模式下也应用。

  • 新建构造函数参数 chunk_size 可用于限制每次请求读取内存的数据量。

  • 新建构造函数参数 idle_connection_timeoutbody_timeout 允许对请求的读取设置时间限制。

  • 表单编码的消息体现在被解析为所有HTTP方法,而不仅仅是 POSTPUTPATCH .

tornado.httputil

tornado.ioloop

  • IOLoop.add_handler 现在,相关的方法除了接受原始文件描述符外,还接受类似文件的对象。建议传递对象(如果可能),以避免单元测试中与垃圾收集相关的问题。

  • 新方法 IOLoop.clear_instance 使卸载singleton实例成为可能。

  • 超时调度现在对于缓慢的回调更为可靠。

  • IOLoop.add_timeout 现在效率提高了一点。

  • 当函数由 IOLoop 返回A FutureFuture 有个例外, IOLoop 将记录异常。

  • 新方法 IOLoop.spawn_callback 简化了启动与调用方堆栈上下文分离的fire-and-forget回调的过程。

  • 新方法 IOLoop.call_laterIOLoop.call_at 简化相对或绝对超时的规范(与 add_timeout ,使用其参数的类型)。

tornado.iostream

  • 这个 callback 大多数人的论点 IOStream 方法现在是可选的。在没有回调的情况下调用时,该方法将返回 Future 用于协同训练。

  • 新方法 IOStream.start_tls 转换一个 IOStreamSSLIOStream .

  • 当一个 IOErrorOSError 没有 errno 属性被引发。

  • BaseIOStream.read_bytes 现在接受 partial 关键字参数,可用于在读取全部金额之前返回。这是一个更友好的替代方案 streaming_callback .

  • BaseIOStream.read_untilread_until_regex 现在,A max_bytes 关键字参数,如果无法从给定的字节数满足请求,将导致请求失败。

  • IOStream 如果不需要数据来满足挂起的读取,就不再从套接字读取内存。作为副作用,如果另一方在缓冲区中存在未使用的数据时关闭连接,则不会立即运行close回调。

  • 默认值 chunk_size 已增加到64KB(从4KB)

  • 这个 IOStream 构造函数接受新的关键字参数 max_write_buffer_size (默认为无限制)。呼吁 BaseIOStream.write 将提高 StreamBufferFullError 如果未发送的缓冲数据量超过此限制。

  • ETIMEDOUT 不再记录错误。如果需要区分超时与其他形式的闭合连接,请检查 stream.error 来自关闭的回调。

tornado.netutil

  • 什么时候? bind_sockets 自动选择一个端口,它现在将对IPv4和IPv6使用相同的端口。

  • 现在,在python 3.3及更高版本上,默认情况下禁用了tls压缩(在旧版本中不可能更改此选项)。

tornado.options

  • 现在可以通过设置禁用默认日志配置 options.loggingNone 而不是字符串 "none" .

tornado.platform.asyncio

  • 现在在Python2.6上工作。

  • 现在使用的是Trollius 0.3版。

tornado.platform.twisted

  • TwistedIOLoop 现在在python 3.3+上工作(使用twisted 14.0.0+)。

tornado.simple_httpclient

  • simple_httpclient 对ipv6有更好的支持,现在默认启用了ipv6。

  • 改进了默认密码套件选择(python 2.7+)。

  • HTTP实现已与 tornado.httpserver 在里面 tornado.http1connection

  • 流请求主体现在通过 body_producer 关键字参数 tornado.httpclient.HTTPRequest .

  • 这个 expect_100_continue 关键字参数 tornado.httpclient.HTTPRequest 允许使用HTTP Expect: 100-continue 特征。

  • simple_httpclient 现在引发原始异常(例如 IOError )在更多情况下,而不是将所有内容转换为 HTTPError .

tornado.stack_context

  • 当没有栈上下文处于活动状态时,栈上下文系统现在的性能开销更低。

tornado.tcpclient

  • 创建TCP连接和iostreams的新模块,包括名称解析、连接和SSL握手。

tornado.testing

  • AsyncTestCase 现在尝试检测作为生成器但不与一起运行的测试方法 @gen_test 或者任何类似的装饰器(这将导致测试被无提示地跳过)。

  • 当测试超时时,将显示更好的堆栈跟踪。

  • 这个 @gen_test 装饰师现在走了 *args, **kwargs 所以它可以用于带参数的函数。

  • 修复测试套件的时间 unittest2 安装在python 3上。

tornado.web

  • 现在可以使用 stream_request_body 装饰师和新的 RequestHandler.data_received 方法。

  • RequestHandler.flush 现在返回 Future 如果没有回调。

  • 新例外 Finish 可以在不触发错误处理的情况下引发以完成请求。

  • 当启用gzip支持时,所有 text/* mime类型将被压缩,而不仅仅是白名单上的类型。

  • Application 现在实现 HTTPMessageDelegate 接口。

  • HEAD 请求在 StaticFileHandler 不再读取整个文件。

  • StaticFileHandler 现在将响应主体流式传输到客户机。

  • 新设置 compress_response 替换现有 gzip 设置;两个名称都被接受。

  • 不再接受此模块未生成的XSRF cookie(即没有任何特定格式的字符串)(只要cookie和主体/头匹配)。这种模式在测试和非浏览器客户端中很常见,但被Tornado3.2.2中的更改破坏了。

tornado.websocket

  • 默认情况下,来自其他源站点的WebSocket连接现在被拒绝。浏览器对WebSocket连接不使用与大多数其他浏览器启动的通信相同的源站策略。这可能会令人惊讶,并且存在安全风险,因此我们默认情况下不允许在服务器端进行这些连接。若要接受跨源WebSocket连接,请重写新方法 WebSocketHandler.check_origin .

  • WebSocketHandler.closeWebSocketClientConnection.close 现在支持 codereason 参数,用于在关闭时将状态代码和消息发送到连接的另一端。两个班也有 close_codeclose_reason 当另一侧关闭时接收这些值的属性。

  • C加速模块现在使用MSVC正确构建,可以在64位系统上支持大于2GB的消息。

  • 用于检测缺少的C编译器的回退机制现在可以在Mac OS X上正常工作。

  • 论据 WebSocketHandler.open 现在的解码方式与 RequestHandler.get 以及类似的方法。

  • 现在允许它重写 prepare 在一个 WebSocketHandler ,并且此方法可以以通常的方式生成HTTP响应(错误页)。一旦WebSocket握手完成,仍然不允许使用HTTP响应方法。

tornado.wsgi

  • 新班级 WSGIAdapter 支持龙卷风的运行 Application 在wsgi服务器上,以更兼容Tornado的非wsgi的方式 HTTPServer . WSGIApplication 不赞成使用 WSGIAdapter 有规律地 Application .

  • WSGIAdapter 现在支持gzip输出。