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.argumentsRequestHandler.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.autoreload

  • tornado.autoreload 现在在导入时出错时更可靠。

  • 调用 tornado.autoreload.start (或创建一个 Application 具有 debug=True )两次相同 IOLoop 现在什么都不做(而不是创建多个定期回调)。在多个上启动自动加载 IOLoop 在同一个过程中,现在记录一个警告。

  • 自动加载运行的脚本不再继承 __future__ 龙卷风使用的进口产品。

tornado.auth

  • 在python 3上, get_authenticated_user 方法族现在返回字符串而不是字节字符串。

  • 中定义的异步方法 tornado.auth 现在返回A Future 和他们的 callback 参数是可选的。这个 Future 接口是首选的,因为它提供了更好的错误处理(上一个接口刚刚记录了一个警告,没有返回)。

  • 这个 tornado.auth mixin类现在定义一个方法 get_auth_http_client ,可以重写为使用非默认值 AsyncHTTPClient 实例(例如使用 IOLoop

  • 亚类 OAuthMixin are encouraged to override OAuthMixin._oauth_get_user_future instead of _ 虽然仍然支持这两种方法,但oauth-get-user

tornado.concurrent

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.Callbackgen.Task 现在自动进行堆栈上下文包装,以便在与不进行自身包装的异步函数一起使用时最小化上下文泄漏的风险。

  • 修复了一个涉及发电机的内存泄漏, RequestHandler.flush 以及在写入输出时关闭连接的客户端。

  • 生成一个大列表不再具有二次型性能。

tornado.httpclient

tornado.httpserver

  • HTTPServer 当无法从HTTP 1.1保持活动连接读取第二个请求时,不再记录错误。

  • HTTPServer 现在需要一个 protocol 可以设置为的关键字参数 https 如果服务器位于未设置任何支持的X头的SSL解码代理之后。

  • tornado.httpserver.HTTPConnection 现在有一个 set_close_callback 应该使用的方法,而不是 stream 属性。

  • 空HTTP请求参数不再被忽略。这适用于 HTTPRequest.argumentsRequestHandler.get_argument[s] 在wsgi和非wsgi模式下。

tornado.ioloop

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

tornado.netutil

tornado.options

tornado.platform.caresresolver

  • 包含异步实现的新模块 Resolver 接口,使用 pycares 类库。

tornado.platform.twisted

  • 新班级 tornado.platform.twisted.TwistedIOLoop 允许Tornado代码在扭曲的反应堆上运行(与现有的 TornadoReactor 它在另一个方向上架起了桥梁。

  • 新班级 tornado.platform.twisted.TwistedResolver 是的异步实现 Resolver 接口。

tornado.process

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_importdivision

tornado.testing

  • 新功能 tornado.testing.bind_unused_port 两者都选择一个端口并将一个套接字绑定到该端口,因此不存在使用同一端口的另一个进程的风险。 get_unused_port 现已弃用。

  • 新装修工 tornado.testing.gen_test 可用于允许屈服 tornado.gen 测试中的对象,作为 stopwait 方法 AsyncTestCase .

  • tornado.testing.AsyncTestCase 和朋友现在扩展 unittest2.TestCase 当它可用时(并继续使用标准 unittest 模块时间 unittest2 不可用)

  • tornado.testing.ExpectLog can be used as a finer-grained alternative to tornado.testing.LogTrapTestCase

  • 命令行接口 tornado.testing.main 现在支持来自底层的其他参数 unittest 模块: verbosequietfailfastcatchbuffer .

  • 被蔑视的 --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 attributes path_args and path_kwargs, which contain the positional and keyword arguments that are passed to the get/post/etc method. These attributes are set before those methods are called, so they are available during prepare()

  • 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