Tornado is a Python web framework and asynchronous networking library. By using non-blocking network I/O, Tornado can scale to tens of thousands of open connections, making it ideal for long polling, WebSockets, and other applications that require a long-lived connection to each user. It's comprised of a web framework, a HTTP client and server implementation based on an asynchronous networking core, and it coroutine library. As whole it can supplant WSGI setups, but the web framework itself may be run with traditional servers.
minor feature: What's new in Tornado 6.1.0Oct 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, the `ContextVar.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 with. `curl_httpclient`.Mixing requests with and without proxies works correctly in `curl_httpclient`. (assuming the version of pycurl is recent enough).A default `User-Agent` of `Tornado/ VERSION` is now used if the. `user_agent` parameter is not specified.After a 303 redirect, `tornado.simple_httpclient` always uses `GET`. Previously this would use `GET` if the original request was a `POST` and. would otherwise reuse the original request method. For `curl_httpclient`, the. behavior depends on the version of `libcurl` (with the most recent versions. using `GET` after 303 regardless of the original method).Setting `request_timeout` and/or `connect_timeout` to zero is now supported. to disable the timeout.`tornado.httputil`.Header parsing is now faster.`.pa