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使用twistedTornado的日志记录现在噪音更低,不再直接进入根日志记录器,允许更细粒度的配置。
新班级
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.authmixin类现在定义一个方法get_auth_http_client,可以重写为使用非默认值AsyncHTTPClient实例(例如使用IOLoop)亚类
OAuthMixinare encouraged to overrideOAuthMixin._oauth_get_user_futureinstead 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.ExpectLogcan 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.RequestHandlerhas new attributespath_argsandpath_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_connectWebSocketHandler有新方法ping和on_pong将ping发送到浏览器(不支持draft76协议)