Tornado 4.0的新功能¶
2014年7月15日¶
集锦¶
这个
tornado.web.stream_request_bodydecorator允许以有限的内存使用率上载大型文件。协程现在更快,在龙卷风中被广泛使用。现在返回更多方法
Futures,包括大多数IOStream方法和RequestHandler.flush.现在允许许多用户重写的方法返回
Future用于流量控制。HTTP相关代码现在在
tornado.httpserver,tornado.simple_httpclient和tornado.wsgi模块,使对chunked和gzip编码等特性的支持更加一致。HTTPServer现在使用在中定义的新委托接口tornado.httputil除了旧的单一回调接口。新模块
tornado.tcpclient创建具有非阻塞DNS、SSL握手和对IPv6支持的TCP连接。
向后兼容性说明¶
tornado.concurrent.Future不再是线程安全的;使用concurrent.futures.Future当需要螺纹安全时。龙卷风现在取决于 certifi 而不是捆绑自己的Mozilla CA列表副本。使用时将自动安装
pip或easy_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_callback和WebSocketHandler.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.concurrent.Future现在总是线程不安全(以前如果concurrent.futures包可用)。这提高了性能并提供了更一致的语义。接受期货的龙卷风部分将接受龙卷风的线程不安全期货和线程安全期货。concurrent.futures.Future.tornado.concurrent.Future现在包含了旧版本的所有功能TracebackFuture班级。TracebackFuture现在只是Future.
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.httpserver和tornado.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.write和HTTPServerRequest.finish方法现在已弃用。 (RequestHandler.write和RequestHandler.finish是 not 已弃用;这仅适用于HTTPServerRequest)HTTPServer现在支持HTTPServerConnectionDelegate除了旧的request_callback接口。委托接口支持请求主体的流式处理。HTTPServer现在检测应用程序发送Content-Length与实际内容不一致的错误。新建构造函数参数
max_header_size和max_body_size允许为请求的不同部分设置单独的限制。max_body_size即使在流模式下也应用。新建构造函数参数
chunk_size可用于限制每次请求读取内存的数据量。新建构造函数参数
idle_connection_timeout和body_timeout允许对请求的读取设置时间限制。表单编码的消息体现在被解析为所有HTTP方法,而不仅仅是
POST,PUT和PATCH.
tornado.httputil¶
HTTPServerRequest已从移动到此模块tornado.httpserver.新的基类
HTTPConnection,HTTPServerConnectionDelegate和HTTPMessageDelegate定义应用程序和HTTP实现之间的交互。
tornado.ioloop¶
IOLoop.add_handler现在,相关的方法除了接受原始文件描述符外,还接受类似文件的对象。建议传递对象(如果可能),以避免单元测试中与垃圾收集相关的问题。新方法
IOLoop.clear_instance使卸载singleton实例成为可能。超时调度现在对于缓慢的回调更为可靠。
IOLoop.add_timeout现在效率提高了一点。新方法
IOLoop.spawn_callback简化了启动与调用方堆栈上下文分离的fire-and-forget回调的过程。新方法
IOLoop.call_later和IOLoop.call_at简化相对或绝对超时的规范(与add_timeout,使用其参数的类型)。
tornado.iostream¶
这个
callback大多数人的论点IOStream方法现在是可选的。在没有回调的情况下调用时,该方法将返回Future用于协同训练。新方法
IOStream.start_tls转换一个IOStream对SSLIOStream.当一个
IOError或OSError没有errno属性被引发。BaseIOStream.read_bytes现在接受partial关键字参数,可用于在读取全部金额之前返回。这是一个更友好的替代方案streaming_callback.BaseIOStream.read_until和read_until_regex现在,Amax_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.logging到None而不是字符串"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允许使用HTTPExpect: 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.close和WebSocketClientConnection.close现在支持code和reason参数,用于在关闭时将状态代码和消息发送到连接的另一端。两个班也有close_code和close_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输出。