- Tornado 4.2 新特性¶
- May 26, 2015¶
- Backwards-compatibility notes¶
- New modules: tornado.locks and tornado.queues¶
- tornado.autoreload¶
- tornado.concurrent¶
- tornado.curl_httpclient¶
- tornado.escape¶
- tornado.gen¶
- tornado.httpclient¶
- tornado.httpserver¶
- tornado.httputil¶
- tornado.ioloop¶
- tornado.iostream¶
- tornado.locale¶
- tornado.log¶
- tornado.process¶
- tornado.simple_httpclient¶
- tornado.tcpserver¶
- tornado.util¶
- tornado.web¶
- tornado.websocket¶
- May 26, 2015¶
Tornado 4.2 新特性¶
May 26, 2015¶
Backwards-compatibility notes¶
- SSLIOStream.connect and IOStream.start_tls now validate certificatesby default.
- Certificate validation will now use the system CA root certificates insteadof certifi when possible (i.e. Python 2.7.9+ or 3.4+). This includesIOStream and simple_httpclient, but not curl_httpclient.
- The default SSL configuration has become stricter, usingssl.create_default_context where available on the client side.(On the server side, applications are encouraged to migrate from thessl_options dict-based API to pass an ssl.SSLContext instead).
- The deprecated classes in the tornado.auth module, GoogleMixin,FacebookMixin, and FriendFeedMixin have been removed.
New modules: tornado.locks and tornado.queues¶
These modules provide classes for coordinating coroutines, merged fromToro.
To port your code from Toro’s queues to Tornado 4.2, import Queue
,PriorityQueue
, or LifoQueue
from tornado.queues
instead of fromtoro
.
Use Queue
instead of Toro’s JoinableQueue
. In Tornado the methodsjoin
and task_done
are available on all queues, not on aspecial JoinableQueue
.
Tornado queues raise exceptions specific to Tornado instead of reusingexceptions from the Python standard library.Therefore instead of catching the standard queue.Empty
exception fromQueue.get_nowait
, catch the special tornado.queues.QueueEmpty
exception,and instead of catching the standard queue.Full
from Queue.get_nowait
,catch tornado.queues.QueueFull
.
To port from Toro’s locks to Tornado 4.2, import Condition
, Event
,Semaphore
, BoundedSemaphore
, or Lock
from tornado.locks
instead of from toro
.
Toro’s Semaphore.wait
allowed a coroutine to wait for the semaphore tobe unlocked without acquiring it. This encouraged unorthodox patterns; inTornado, just use acquire
.
Toro’s Event.wait
raised a Timeout
exception after a timeout. InTornado, Event.wait
raises tornado.gen.TimeoutError
.
Toro’s Condition.wait
also raised Timeout
, but in Tornado, the Future
returned by Condition.wait
resolves to False after a timeout:
- @gen.coroutine
def await_notification():
if not (yield condition.wait(timeout=timedelta(seconds=1))):
print('timed out')
else:
print('condition is true')
In lock and queue methods, wherever Toro accepted deadline
as a keywordargument, Tornado names the argument timeout
instead.
Toro’s AsyncResult
is not merged into Tornado, nor its exceptionsNotReady
and AlreadySet
. Use a Future
instead. If you wrote code likethis:
- from tornado import gen
- import toro
- result = toro.AsyncResult()
- @gen.coroutine
- def setter():
- result.set(1)
- @gen.coroutine
- def getter():
- value = yield result.get()
- print(value) # Prints "1".
Then the Tornado equivalent is:
- from tornado import gen
- from tornado.concurrent import Future
- result = Future()
- @gen.coroutine
- def setter():
- result.set_result(1)
- @gen.coroutine
- def getter():
- value = yield result
- print(value) # Prints "1".
tornado.autoreload¶
- Improved compatibility with Windows.
- Fixed a bug in Python 3 if a module was imported during a reload check.
tornado.concurrent¶
- run_on_executor now accepts arguments to control which attributesit uses to find the IOLoop and executor.
tornado.curl_httpclient¶
- Fixed a bug that would cause the client to stop processing requestsif an exception occurred in certain places while there is a queue.
tornado.escape¶
- xhtml_escape now supports numeric character references in hexformat ( )
tornado.gen¶
- WaitIterator no longer uses weak references, which fixes severalgarbage-collection-related bugs.
- tornado.gen.Multi and tornado.gen.multi_future (which are used whenyielding a list or dict in a coroutine) now log any exceptions after thefirst if more than one Future fails (previously they would be loggedwhen the Future was garbage-collected, but this is more reliable).Both have a new keyword argument quiet_exceptions to suppresslogging of certain exception types; to use this argument you mustcall Multi or multi_future directly instead of simply yieldinga list.
- multi_future now works when given multiple copies of the same Future.
- On Python 3, catching an exception in a coroutine no longer leads toleaks via Exception.context.
tornado.httpclient¶
- The raise_error argument now works correctly with the synchronousHTTPClient.
- The synchronous HTTPClient no longer interferes with IOLoop.current().
tornado.httpserver¶
- HTTPServer is now a subclass of tornado.util.Configurable.
tornado.httputil¶
- HTTPHeaders can now be copied with copy.copy and copy.deepcopy.
tornado.ioloop¶
- The IOLoop constructor now has a make_current keyword argumentto control whether the new IOLoop becomes IOLoop.current().
- Third-party implementations of IOLoop should accept **kwargsin their initialize methods and pass them to the superclassimplementation.
- PeriodicCallback is now more efficient when the clock jumps forwardby a large amount.
tornado.iostream¶
- SSLIOStream.connect and IOStream.start_tls now validate certificatesby default.
- New method SSLIOStream.wait_for_handshake allows server-side applicationsto wait for the handshake to complete in order to verify client certificatesor use NPN/ALPN.
- The Future returned by SSLIOStream.connect now resolves after thehandshake is complete instead of as soon as the TCP connection isestablished.
- Reduced logging of SSL errors.
- BaseIOStream.read_until_close now works correctly when astreaming_callback is given but callback is None (i.e. whenit returns a Future)
tornado.locale¶
- New method GettextLocale.pgettext allows additional context to besupplied for gettext translations.
tornado.log¶
- define_logging_options now works correctly when given a non-defaultoptions object.
tornado.process¶
- New method Subprocess.wait_for_exit is a coroutine-friendlyversion of Subprocess.set_exit_callback.
tornado.simple_httpclient¶
- Improved performance on Python 3 by reusing a single ssl.SSLContext.
- New constructor argument max_body_size controls the maximum responsesize the client is willing to accept. It may be bigger thanmax_buffer_size if streaming_callback is used.
tornado.tcpserver¶
- TCPServer.handle_stream may be a coroutine (so that any exceptionsit raises will be logged).
tornado.util¶
- import_object now supports unicode strings on Python 2.
- Configurable.initialize now supports positional arguments.
tornado.web¶
- Key versioning support for cookie signing. cookie_secret applicationsetting can now contain a dict of valid keys with version as key. Thecurrent signing key then must be specified via key_version setting.
- Parsing of the If-None-Match header now follows the RFC and supportsweak validators.
- Passing secure=False or httponly=False toRequestHandler.set_cookie now works as expected (previously only thepresence of the argument was considered and its value was ignored).
- RequestHandler.get_arguments now requires that its strip argumentbe of type bool. This helps prevent errors caused by the slightly dissimilarinterfaces between the singular and plural methods.
- Errors raised in _handle_request_exception are now logged more reliably.
- RequestHandler.redirect now works correctly when called from a handlerwhose path begins with two slashes.
- Passing messages containing % characters to tornado.web.HTTPErrorno longer causes broken error messages.
tornado.websocket¶
- The on_close method will no longer be called more than once.
- When the other side closes a connection, we now echo the received closecode back instead of sending an empty close frame.
原文:
https://tornado-zh-cn.readthedocs.io/zh_CN/latest/releases/v4.2.0.html