async/await will be faster than those defined with ``@gen.coroutine`` and
``yield``, but do not support some features including `.Callback`/`.Wait` or
the ability to yield a Twisted ``Deferred``.
+* The async/await keywords are also available when compiling with Cython in
+ older versions of Python, as long as the ``backports_abc`` package is
+ installed.
`tornado.auth`
~~~~~~~~~~~~~~
* New method `.OAuth2Mixin.oauth2_request` can be used to make authenticated
requests with an access token.
+* Now compatible with callbacks that have been compiled with Cython.
`tornado.autoreload`
~~~~~~~~~~~~~~~~~~~~
* Fixed an issue with the autoreload command-line wrapper in which
imports would be incorrectly interpreted as relative.
+`tornado.curl_httpclient`
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+* Fixed parsing of multi-line headers.
+
`tornado.gen`
~~~~~~~~~~~~~
* `.WaitIterator` now supports the ``async for`` statement on Python 3.5.
+* ``@gen.coroutine`` can be applied to functions compiled with Cython.
+ On python versions prior to 3.5, the ``backports_abc`` package must
+ be installed for this functionality.
+* ``Multi`` and `.multi_future` are deprecated and replaced by
+ a unified function `.multi`.
+
+`tornado.httpclient`
+~~~~~~~~~~~~~~~~~~~~
+
+* `tornado.httpclient.HTTPError` is now copyable with the `copy` module.
`tornado.httputil`
~~~~~~~~~~~~~~~~~~
of raising an exception.
* The Twisted and asyncio IOLoop implementations now clear
``current()`` when they exit, like the standard IOLoops.
+* `.IOLoop.add_callback` is faster in the single-threaded case.
+* `.IOLoop.add_callback` no longer raises an error when called on
+ a closed IOLoop, but the callback will not be invoked.
`tornado.iostream`
~~~~~~~~~~~~~~~~~~
* `.StreamClosedError` now has a ``real_error`` attribute which indicates
why the stream was closed. It is the same as the ``error`` attribute of
`.IOStream` but may be more easily accessible than the `.IOStream` itself.
+* Improved error handling in `~.BaseIOStream.read_until_close`.
+* Logging is less noisy when an SSL server is port scanned.
+* ``EINTR`` is now handled on all reads.
`tornado.locale`
~~~~~~~~~~~~~~~~
* `.Lock` and `.Semaphore` now support the ``async with`` statement on
Python 3.5.
+`tornado.log`
+~~~~~~~~~~~~~
+
+* A new time-based log rotation mode is available with
+ ``--log_rotate_mode=time``, ``--log-rotate-when``, and
+ ``log-rotate-interval``.
+
+`tornado.netutil`
+~~~~~~~~~~~~~~~~~
+
+* `.bind_sockets` now supports ``SO_REUSEPORT`` with the ``reuse_port=True``
+ argument.
+
`tornado.options`
~~~~~~~~~~~~~~~~~
* `.Queue` now supports the ``async with`` statement on Python 3.5.
+`tornado.simple_httpclient`
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+* When following redirects, ``streaming_callback`` and
+ ``header_callback`` will no longer be run on the redirect responses
+ (only the final non-redirect).
+
`tornado.template`
~~~~~~~~~~~~~~~~~~
a mode name defined in the `tornado.template.filter_whitespace` function.
The default mode is ``single``, which is the same behavior as prior
versions of Tornado.
+* Non-ASCII filenames are now supported.
`tornado.testing`
~~~~~~~~~~~~~~~~~
with ``.gz``, ``.bz2``, and ``.xz`` extensions.
* Responses smaller than 1000 bytes will no longer be compressed.
* The default gzip compression level is now 6 (was 9).
+* Fixed a regression in Tornado 4.2.1 that broke `.StaticFileHandler`
+ with a ``path`` of ``/``.
+* `tornado.web.HTTPError` is now copyable with the `copy` module.
+* The exception `.Finish` now accepts an argument which will be passed to
+ the method `.RequestHandler.finish`.
+
+`tornado.websocket`
+~~~~~~~~~~~~~~~~~~~
+
+* Fixed handling of continuation frames when compression is enabled.