Tornado 3.0的新功能¶
2013年3月29日¶
集锦¶
这个
callback
许多异步方法的参数现在是可选的,并且这些方法返回Future
. 这个tornado.gen
模块现在理解Futures
,这些方法可以直接使用,而不需要gen.Task
包装器。新功能
IOLoop.current
返回IOLoop
在当前线程上运行的(与IOLoop.instance
,返回特定线程(通常是主线程)的IOLoop。新班级
tornado.netutil.Resolver
提供到DNS解析的异步接口。默认实现仍然是阻塞的,但非阻塞实现可以使用三个可选依赖项之一:ThreadedResolver
使用concurrent.futures
线程池,tornado.platform.caresresolver.CaresResolver
使用pycares
类库,或tornado.platform.twisted.TwistedResolver
使用twisted
Tornado的日志记录现在噪音更低,不再直接进入根日志记录器,允许更细粒度的配置。
新班级
tornado.process.Subprocess
包裹subprocess.Popen
具有PipeIOStream
访问子文件描述符。IOLoop
现在有了静电configure
方法就像一个AsyncHTTPClient
,可用于选择IOLoop
实现而不是默认值。IOLoop
现在可以选择使用单调时钟(如有)(见下文了解更多详细信息)。
向后不兼容的更改¶
不再支持python 2.5。现在在单个代码库中支持python 3,而不是使用
2to3
这个
tornado.database
模块已移除。现在它作为一个单独的包提供, torndb需要
io_loop
参数现在默认为IOLoop.current()
而不是IOLoop.instance()
.空HTTP请求参数不再被忽略。这适用于
HTTPRequest.arguments
和RequestHandler.get_argument[s]
在wsgi和非wsgi模式下。在Python 3上,
tornado.escape.json_encode
不再接受字节字符串。在python 3上,
get_authenticated_user
方法在tornado.auth
现在返回字符串而不是字节字符串。tornado.netutil.TCPServer
已经移动到自己的模块,tornado.tcpserver
.龙卷风测试套件现在需要
unittest2
在python 2.6上运行时。tornado.options.options
不再是的子类dict
;现在需要属性样式访问。
按模块的详细更改¶
多个模块¶
龙卷风不再记录到根记录器。有关新日志方案的详细信息,请参见
tornado.log
模块。请注意,在某些情况下,这将要求您添加显式日志配置,以便查看任何输出(可能只是调用logging.basicConfig()
尽管两者都有IOLoop.start()
和tornado.options.parse_command_line
会帮你的。在python 3.2+上,采用
ssl_options
争论(上)SSLIOStream
,TCPServer
和HTTPServer
)现在接受选项字典或ssl.SSLContext
对象。新的可选依赖项
concurrent.futures
为使用线程提供更好的支持。concurrent.futures
位于Python 3.2+的标准库中,可以安装在旧版本中pip install futures
.
tornado.autoreload
¶
tornado.autoreload
现在在导入时出错时更可靠。调用
tornado.autoreload.start
(或创建一个Application
具有debug=True
)两次相同IOLoop
现在什么都不做(而不是创建多个定期回调)。在多个上启动自动加载IOLoop
在同一个过程中,现在记录一个警告。自动加载运行的脚本不再继承
__future__
龙卷风使用的进口产品。
tornado.auth
¶
在python 3上,
get_authenticated_user
方法族现在返回字符串而不是字节字符串。中定义的异步方法
tornado.auth
现在返回AFuture
和他们的callback
参数是可选的。这个Future
接口是首选的,因为它提供了更好的错误处理(上一个接口刚刚记录了一个警告,没有返回)。这个
tornado.auth
mixin类现在定义一个方法get_auth_http_client
,可以重写为使用非默认值AsyncHTTPClient
实例(例如使用IOLoop
)亚类
OAuthMixin
are encouraged to overrideOAuthMixin._oauth_get_user_future
instead of_ 虽然仍然支持这两种方法,但oauth-get-user
。
tornado.concurrent
¶
新模块
tornado.concurrent
包含支持使用的代码concurrent.futures
或者在该模块不可用时模拟基于未来的接口。
tornado.curl_httpclient
¶
初步支持
tornado.curl_httpclient
在Python 3上。pycurl的最新官方版本只支持python 2,但是ubuntu有一个12.10版本的端口。 (apt-get install python3-pycurl
)此端口当前存在阻止其处理任意二进制数据的错误,但它应适用于文本(utf8)资源。如果不使用curl对象就创建并关闭了一个curl对象,那么可以使用libcurl 7.29.0修复崩溃。
tornado.escape
¶
在Python 3上,
json_encode
不再接受字节字符串。这反映了底层JSON模块的行为。python 2的行为是不变的,但应该更快。
tornado.gen
¶
新装修工
@gen.coroutine
可作为@gen.engine
. 它自动返回Future
,在函数中,返回的值不是调用回调,raise gen.Return(value)
(或者简单地return value
在Python 3.3中)。发电机现在可能会产生
Future
物体。回调由
gen.Callback
和gen.Task
现在自动进行堆栈上下文包装,以便在与不进行自身包装的异步函数一起使用时最小化上下文泄漏的风险。修复了一个涉及发电机的内存泄漏,
RequestHandler.flush
以及在写入输出时关闭连接的客户端。生成一个大列表不再具有二次型性能。
tornado.httpclient
¶
AsyncHTTPClient.fetch
现在返回Future
它的回调参数是可选的。当使用将来的接口时,任何错误都会自动引发,就像HTTPResponse.rethrow
被叫来。AsyncHTTPClient.configure
以及所有AsyncHTTPClient
构造函数现在采用defaults
关键字参数。此参数应为字典,其值将用于替换HTTPRequest
那还没定。的所有未设置属性
tornado.httpclient.HTTPRequest
现在None
. 某些属性的默认值 (connect_timeout
,request_timeout
,follow_redirects
,max_redirects
,use_gzip
,proxy_password
,allow_nonstandard_methods
和validate_cert
已从HTTPRequest
到客户端实现。这个
max_clients
参数AsyncHTTPClient
现在是只包含关键字的参数。关键字参数
AsyncHTTPClient.configure
在直接实例化实现子类时不再使用。次要的
AsyncHTTPClient
回调 (streaming_callback
,header_callback
和prepare_curl_callback
现在尊重StackContext
.
tornado.httpserver
¶
HTTPServer
当无法从HTTP 1.1保持活动连接读取第二个请求时,不再记录错误。HTTPServer
现在需要一个protocol
可以设置为的关键字参数https
如果服务器位于未设置任何支持的X头的SSL解码代理之后。tornado.httpserver.HTTPConnection
现在有一个set_close_callback
应该使用的方法,而不是stream
属性。空HTTP请求参数不再被忽略。这适用于
HTTPRequest.arguments
和RequestHandler.get_argument[s]
在wsgi和非wsgi模式下。
tornado.ioloop
¶
新功能
IOLoop.current
返回IOLoop
在当前线程上运行的(与IOLoop.instance
,返回特定线程(通常是主线程)的IOLoop。新方法
IOLoop.add_future
异步时在IOLoop上运行回调Future
完成。IOLoop
现在有了静电configure
方法就像一个AsyncHTTPClient
,可用于选择IOLoop
实现而不是默认值。这个
IOLoop
轮询器实现 (select
,epoll
,kqueue
)现在可以作为IOLoop
. 例示IOLoop
将继续自动选择最佳的可用实现。这个
IOLoop
构造函数有一个新的关键字参数time_func
,用于设置调度回调时使用的时间函数。这对time.monotonic
函数,在python 3.3中引入,并通过monotime
模块。在这里使用单调时钟可以避免系统时钟更改时出现的问题。新功能
IOLoop.time
根据IOLoop返回当前时间。要使用新的单调时钟功能,所有调用IOLoop.add_timeout
必须通过Adatetime.timedelta
或相对于IOLoop.time
不是time.time
. (time.time
只要IOLoop的time_func
参数未使用)。新的方便方法
IOLoop.run_sync
可以用来启动一个IOLoop足够长的时间来运行一个协程。新方法
IOLoop.add_callback_from_signal
在信号处理程序(常规add_callback
方法可能死锁)。IOLoop
现在使用signal.set_wakeup_fd
如果可用(在Unix上为python 2.6以上),以避免可能导致python信号处理程序延迟的竞争条件。方法
IOLoop.running()
已删除。IOLoop
已被重构以更好地支持子类化。IOLoop.add_callback
和add_callback_from_signal
现在采取*args, **kwargs
传递到回调。
tornado.iostream
¶
IOStream.connect
现在有一个可选的server_hostname
用于SSL证书验证的参数(如果适用)。另外,当支持(在python 3.2+上)时,这个主机名将通过sni发送(它由tornado.simple_httpclient
)大部分
IOStream
已重构为单独的类BaseIOStream
.新班级
tornado.iostream.PipeIOStream
在管道文件描述符上提供iostream接口。IOStream
现在引发一个新的异常tornado.iostream.StreamClosedError
当您试图在流关闭后(在任何一侧)进行读或写操作时。IOStream
现在只需在连接ECONNRESET
错误,而不是将其记录为错误。IOStream.error
不再收集不相关的异常。BaseIOStream.close
现在有一个exc_info
参数(类似于logging
可用于设置流的error
关闭时的属性。BaseIOStream.read_until_close
现在在有缓冲数据的情况下调用它时工作正常。修正了在Pypy上运行时的主要性能回归(在Tornado 2.3中引入)。
tornado.log
¶
新模块包含
enable_pretty_logging
和LogFormatter
,已从“选项”模块中移动。LogFormatter
现在可以更好地处理消息中的非ASCII数据和回溯。
tornado.netutil
¶
新班级
tornado.netutil.Resolver
提供到DNS解析的异步接口。默认实现仍然是阻塞的,但非阻塞实现可以使用三个可选依赖项之一:ThreadedResolver
使用concurrent.futures
线程池,tornado.platform.caresresolver.CaresResolver
使用pycares
类库,或tornado.platform.twisted.TwistedResolver
使用twisted
新功能
tornado.netutil.is_valid_ip
如果给定字符串是有效的IP(v4或v6)地址,则返回true。tornado.netutil.bind_sockets
有新的flags
可用于向传递附加标志的参数getaddrinfo
.tornado.netutil.bind_sockets
不再设置AI_ADDRCONFIG
;这将使它比以前更频繁地绑定到IPv4和IPv6。tornado.netutil.bind_sockets
现在在编译python时可以使用--disable-ipv6
但是IPv6 DNS解析在系统上可用。tornado.netutil.TCPServer
已经移动到自己的模块,tornado.tcpserver
.
tornado.options
¶
中函数的基础类
tornado.options
现在是公开的 (tornado.options.OptionParser
)这可用于创建多个独立的选项集,例如用于子命令。tornado.options.parse_config_file
现在,默认情况下自动配置日志记录,方法与parse_command_line
做。新功能
tornado.options.add_parse_callback
计划在分析命令行或配置文件之后运行回调。关键字参数final=False
可用于解析函数以抑制这些回调。tornado.options.define
现在需要一个callback
争论。每当更改选项时,将使用新值运行此回调。这对于设置其他选项的选项尤其有用,例如从配置文件中读取。tornado.options.parse_command_line
--help
输出现在转到stderr
而不是stdout
.tornado.options.options
不再是的子类dict
;现在需要属性样式访问。tornado.options.options
(和OptionParser
实例)现在mockable()
返回与兼容的包装对象的方法mock.patch
.功能
tornado.options.enable_pretty_logging
已移动到tornado.log
模块。
tornado.platform.caresresolver
¶
包含异步实现的新模块
Resolver
接口,使用pycares
类库。
tornado.platform.twisted
¶
新班级
tornado.platform.twisted.TwistedIOLoop
允许Tornado代码在扭曲的反应堆上运行(与现有的TornadoReactor
它在另一个方向上架起了桥梁。新班级
tornado.platform.twisted.TwistedResolver
是的异步实现Resolver
接口。
tornado.process
¶
新班级
tornado.process.Subprocess
包裹subprocess.Popen
具有PipeIOStream
访问子文件描述符。
tornado.simple_httpclient
¶
SimpleAsyncHTTPClient
现在需要一个resolver
关键字参数(可以传递给构造函数或configure
)允许它使用新的非阻塞tornado.netutil.Resolver
.当跟踪重定向时,
SimpleAsyncHTTPClient
现在将302响应代码视为303。这与HTTP规范相反,但与所有浏览器和其他主要HTTP客户端(包括CurlAsyncHTTPClient
)行为
header_callback
具有SimpleAsyncHTTPClient
已更改,现在与CurlAsyncHTTPClient
. 头回调现在接收响应的第一行(例如HTTP/1.0 200 OK
)最后的空行。tornado.simple_httpclient
现在接受包含Content-Length
标题。修复了一个错误,其中
SimpleAsyncHTTPClient
正在客户端的stack_context
.
tornado.stack_context
¶
stack_context.wrap
现在,在更一致的环境中运行包装的回调,方法是重新创建上下文,即使它们已经存在于堆栈中。修复了堆栈上下文可能从一个回调链泄漏到另一个回调链的错误。
在a中生成语句
with
语句可能导致堆栈上下文不一致;当检测到这种情况时,将立即引发异常。
tornado.template
¶
呈现模板时出现的错误不再记录生成的代码,因为增强的堆栈跟踪(来自版本2.1)会使这变得不必要。
这个
{{% apply %}}
指令现在可以正确地处理同时返回Unicode字符串和字节字符串的函数(以前只支持字节字符串)。模板中的代码不再受Tornado的影响
__future__
进口(之前包括absolute_import
和division
)
tornado.testing
¶
新功能
tornado.testing.bind_unused_port
两者都选择一个端口并将一个套接字绑定到该端口,因此不存在使用同一端口的另一个进程的风险。get_unused_port
现已弃用。新装修工
tornado.testing.gen_test
可用于允许屈服tornado.gen
测试中的对象,作为stop
和wait
方法AsyncTestCase
.tornado.testing.AsyncTestCase
和朋友现在扩展unittest2.TestCase
当它可用时(并继续使用标准unittest
模块时间unittest2
不可用)tornado.testing.ExpectLog
can be used as a finer-grained alternative totornado.testing.LogTrapTestCase
命令行接口
tornado.testing.main
现在支持来自底层的其他参数unittest
模块:verbose
,quiet
,failfast
,catch
,buffer
.被蔑视的
--autoreload
选择权tornado.testing.main
已删除。使用python -m tornado.autoreload
改为前缀命令。这个
--httpclient
选择权tornado.testing.main
已移至tornado.test.runtests
以免污染应用程序选项名称空间。这个tornado.options
模块的新回调支持现在使从包装脚本添加选项变得容易,而不是将所有可能的选项放入tornado.testing.main
.AsyncHTTPTestCase
不再呼叫AsyncHTTPClient.close
对于使用单例的测试IOLoop.instance
.LogTrapTestCase
在未知日志记录配置中运行时不再失败。这使得测试可以在鼻下运行,鼻下执行自己的日志缓冲。 (LogTrapTestCase
在这种情况下不会做任何有用的事情,但至少它不会再破坏任何东西)。
tornado.util
¶
tornado.util.b
(只供内部使用)不见了。
tornado.web
¶
RequestHandler.set_header
现在不敏感地覆盖前面的头值大小写。tornado.web.RequestHandler
has new attributespath_args
andpath_kwargs
, which contain the positional and keyword arguments that are passed to theget
/post
/etc method. These attributes are set before those methods are called, so they are available duringprepare()
tornado.web.ErrorHandler
不再需要上的XSRF令牌POST
请求,所以发到一个未知的URL总是返回404,而不是抱怨XSRF令牌。与HTTP状态代码相关的几种方法现在采用
reason
关键字参数,用于指定备用“reason”字符串(即“http/1.1 404 not found”中的“not found”)。现在可以设置规范中定义之外的状态代码,只要给出了原因字符串。这个
Date
现在默认情况下,所有响应都设置了HTTP头。Etag
/If-None-Match
请求现在使用StaticFileHandler
.StaticFileHandler
不再设置Cache-Control: public
不必要的。当在中启用gzip时
tornado.web.Application
适当的Vary: Accept-Encoding
现在发送邮件头。不再需要在单个主机中传递主机的所有处理程序
Application.add_handlers
打电话。现在,请求将与任何host_pattern
包括请求的Host
标题。
tornado.websocket
¶
客户端WebSocket支持现在可用:
tornado.websocket.websocket_connect
WebSocketHandler
有新方法ping
和on_pong
将ping发送到浏览器(不支持draft76
协议)