Tornado 4.0的新功能¶
2014年7月15日¶
集锦¶
这个
tornado.web.stream_request_body
decorator允许以有限的内存使用率上载大型文件。协程现在更快,在龙卷风中被广泛使用。现在返回更多方法
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输出。