What’s new in Tornado 6.1.0¶
Oct 30, 2020¶
Deprecation notice¶
This is the last release of Tornado to support Python 3.5. Future versions will require Python 3.6 or newer.
General changes¶
Windows support has been improved. Tornado is now compatible with the proactor event loop (which became the default in Python 3.8) by automatically falling back to running a selector in a second thread. This means that it is no longer necessary to explicitly configure a selector event loop, although doing so may improve performance. This does not change the fact that Tornado is significantly less scalable on Windows than on other platforms.
Binary wheels are now provided for Windows, MacOS, and Linux (amd64 and arm64).
tornado.gen
¶
coroutine
now has better support for the Python 3.7+contextvars
module. In particular, theContextVar.reset
method is now supported.
tornado.http1connection
¶
HEAD
requests to handlers that used chunked encoding no longer produce malformed output.Certain kinds of malformed
gzip
data no longer cause an infinite loop.
tornado.httpclient
¶
Setting
decompress_response=False
now works correctly withcurl_httpclient
.Mixing requests with and without proxies works correctly in
curl_httpclient
(assuming the version of pycurl is recent enough).A default
User-Agent
ofTornado/$VERSION
is now used if theuser_agent
parameter is not specified.After a 303 redirect,
tornado.simple_httpclient
always usesGET
. Previously this would useGET
if the original request was aPOST
and would otherwise reuse the original request method. Forcurl_httpclient
, the behavior depends on the version oflibcurl
(with the most recent versions usingGET
after 303 regardless of the original method).Setting
request_timeout
and/orconnect_timeout
to zero is now supported to disable the timeout.
tornado.httputil
¶
Header parsing is now faster.
parse_body_arguments
now accepts incompletely-escaped non-ASCII inputs.
tornado.iostream
¶
ssl.CertificateError
during the SSL handshake is now handled correctly.Reads that are resolved while the stream is closing are now handled correctly.
tornado.log
¶
When colored logging is enabled,
logging.CRITICAL
messages are now recognized and colored magenta.
tornado.netutil
¶
EADDRNOTAVAIL
is now ignored when binding tolocalhost
with IPv6. This error is common in docker.
tornado.platform.asyncio
¶
AnyThreadEventLoopPolicy
now also configures a selector event loop for these threads (the proactor event loop only works on the main thread)
tornado.platform.auto
¶
The
set_close_exec
function has been removed.
tornado.testing
¶
ExpectLog
now has alevel
argument to ensure that the given log level is enabled.
tornado.web
¶
RedirectHandler.get
now accepts keyword arguments.When sending 304 responses, more headers (including
Allow
) are now preserved.reverse_url
correctly handles escaped characters in the regex route.Default
Etag
headers are now generated with SHA-512 instead of MD5.
tornado.websocket
¶
The
ping_interval
timer is now stopped when the connection is closed.websocket_connect
now raises an error when it encounters a redirect instead of hanging.