What’s new in Tornado 6.1.0¶
Oct 30, 2020¶
- This is the last release of Tornado to support Python 3.5. Future versions will require Python 3.6 or newer.
- 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).
coroutinenow has better support for the Python 3.7+
contextvarsmodule. In particular, the
ContextVar.resetmethod is now supported.
HEADrequests to handlers that used chunked encoding no longer produce malformed output.
- Certain kinds of malformed
gzipdata no longer cause an infinite loop.
decompress_response=Falsenow works correctly with
- Mixing requests with and without proxies works correctly in
curl_httpclient(assuming the version of pycurl is recent enough).
- A default
Tornado/$VERSIONis now used if the
user_agentparameter is not specified.
- After a 303 redirect,
GET. Previously this would use
GETif the original request was a
POSTand would otherwise reuse the original request method. For
curl_httpclient, the behavior depends on the version of
libcurl(with the most recent versions using
GETafter 303 regardless of the original method).
connect_timeoutto zero is now supported to disable the timeout.
- Header parsing is now faster.
parse_body_argumentsnow accepts incompletely-escaped non-ASCII inputs.
ssl.CertificateErrorduring the SSL handshake is now handled correctly.
- Reads that are resolved while the stream is closing are now handled correctly.
- When colored logging is enabled,
logging.CRITICALmessages are now recognized and colored magenta.
EADDRNOTAVAILis now ignored when binding to
localhostwith IPv6. This error is common in docker.
AnyThreadEventLoopPolicynow also configures a selector event loop for these threads (the proactor event loop only works on the main thread)
set_close_execfunction has been removed.
RedirectHandler.getnow accepts keyword arguments.
- When sending 304 responses, more headers (including
Allow) are now preserved.
reverse_urlcorrectly handles escaped characters in the regex route.
Etagheaders are now generated with SHA-512 instead of MD5.