mrkeyoor.com_
Mon 02 Nov 19:01 UTC
Webevaluationupdated 02 Nov 2026

tornado review

Tornado is a Python web framework and asynchronous networking library for applications with long-lived connections, including WebSockets and long polling. It includes an HTTP server and asynchronous HTTP client.

Verdict

Tornado merits a trial for long-lived Python connections when the team can keep handlers non-blocking and manage server processes. The measured installation succeeded, but the test command exited 1 with 198 failures, leaving repository verification unresolved. Investigate that result before adoption. Choose another route if officially supported Windows production deployment is required.

We ran it

Lab card: what happened when we ran tornadoScreenshot of tornado (www.tornadoweb.org)
Install✓ · 29s79 packages · 190 MB
Build✓ · 2s
Tests✗ · 47s662 passed · 198 failed · 192 skipped · 2 errors of 862 (pytest)
Known vulns0(pip-audit)
Repo335 files~55,285 lines of source · 2.6 MB · 3 CI workflows

Answers from our run

Does tornado build from source?

Dependencies installed in 29 seconds (79 packages), and the build succeeded in 2 seconds. We cloned commit 57deb98 into a clean Debian container with 3 CPUs and no project-specific setup.

Do tornado's tests pass?

No. The project's own test command finished in 47 seconds and reported 662 passed, 198 failed, 192 skipped, 2 collection errors (pytest).

Does tornado have known vulnerabilities in its dependencies?

pip-audit found none in the dependency tree at the time of our run.

Who should not use tornado?

Teams requiring officially supported Windows production deployment.

What are the alternatives to tornado?

aiohttp, FastAPI. Tornado merits a trial for long-lived Python connections when the team can keep handlers non-blocking and manage server processes.

SetupN/AThe supplied installation succeeded, but a complete setup following the documentation was not evaluated and the test invocation is missing.
DocsN/AThe supplied documentation supports the architectural discussion, but completing a service from its instructions was not evaluated.
CommunityN/AThe supplied push date does not establish support response times, maintainer capacity or the quality of community assistance.
MaturityN/AThe test command failed, and no long-running service or concurrency workload was measured, so production reliability remains unassessed.

Who it’s for

Python developers evaluating WebSocket or long-polling services.
Teams prepared to keep blocking work out of the event loop and manage application processes.
Maintainers comparing Tornado with libraries designed for asyncio.

Who it’s NOT for

Teams requiring officially supported Windows production deployment.
Applications that must perform blocking work in handlers without arranging where that work executes.
Teams expecting WSGI to be Tornado's main application interface: the documentation recommends using Tornado's own interfaces directly.

Setup reality

The October 30, 2026 sandbox run at commit 57deb98 installed in 29 seconds and built in 2 seconds, with 79 dependencies recorded and 190 MB on disk. Tests exited 1 after 47 seconds. The record lists 662 passed, 198 failed, 192 skipped and 2 collection/setup errors, alongside a separately recorded total of 862. These counts are not reconciled. Pip-audit reported 0 known vulnerabilities; its recorded coverage was 78 scanned packages and one skipped package.

Visible failures report unexpected tornado.access logs. The supplied tail does not establish the cause of every failure or show the underlying exceptions for both errors. The exact test invocation is not supplied.

The sandbox configuration was 3 CPUs, 8 GB RAM and image label ghcr.io/astral-sh/uv:python3.12-bookworm. The label does not establish actual runtime or operating-system versions. Deployment requires managing the application process, and the documentation does not recommend Windows for production.

Tornado fits services that keep connections open

A WebSocket connection can spend most of its life waiting. Tornado is a Python web framework and asynchronous networking library intended for applications with long-lived connections, including WebSockets and long polling. It merits a trial when the team can keep blocking work out of the event loop.

The project includes its own HTTP server and asynchronous HTTP client. Its documentation recommends writing applications against Tornado's own interfaces directly; WSGI support is not a focus of development. Choosing Tornado therefore includes a decision about application structure and deployment.

The supplied repository run installed and built successfully, but its test command failed. That leaves verification unresolved. The run does not establish production reliability or connection capacity.

What happened when we ran it

Tornado installed in 29 seconds and built in 2 seconds in the sandbox. Its test command exited 1 after 47 seconds. The record lists 662 passed, 198 failed, 192 skipped and 2 collection/setup errors, alongside a separately recorded total of 862. These figures are not reconciled, so they do not support a pass percentage.

Several visible failures are in tornado/test/simple_httpclient_test.py. They report "Unexpected logs found" and include INFO entries from tornado.access. The no-content case includes an HTTP 204 access entry. Other visible entries concern redirects, timeouts and streaming callbacks. The tail shows the assertion in those examples, but it does not establish the cause of every failure or expose the underlying exceptions for both errors. The exact test invocation is not supplied, which limits reproduction from this record alone.

The run measured commit 57deb98 on October 30, 2026, with 3 CPUs and 8 GB RAM. The image label was ghcr.io/astral-sh/uv:python3.12-bookworm. That label does not establish the actual Python or operating-system version. The record lists 79 dependencies and 190 MB on disk. Pip-audit reported 0 known vulnerabilities, with 78 packages scanned and one package skipped. That result covers the recorded scan, not every possible security issue.

The checkout had 335 files, approximately 55,285 source lines and 2.6 MB. The scan detected 3 CI workflow files, no Dockerfile and no tests directory. The failure paths show tests under tornado/test, so the directory signal does not establish that the project lacks tests. No connection-capacity or request-latency benchmark accompanies this run.

Blocking calls still stop the event loop

Tornado uses a single-threaded event loop. Its asynchronous I/O guide says application code should be asynchronous and non-blocking because only one operation can be active at a time. Declaring an async function does not make a synchronous network operation inside it non-blocking. The guide demonstrates an asynchronous fetch with AsyncHTTPClient and await.

Disk I/O and CPU work can also block. For a proposed service, review what a handler does while another connection waits. The main documentation recommends IOLoop.run_in_executor for blocking code and warns that the function passed to it should avoid referencing Tornado objects. This is a documented option, not an approach exercised by the supplied run.

Tornado shares an event loop with asyncio, and its documentation says libraries designed for asyncio can generally be mixed with Tornado. Compatibility with a particular database client or other library was not verified here.

You manage the server processes

Tornado supplies its own HTTPServer. The deployment guide describes starting it from a main function and configuring an operating system or process manager to run the program.

The guide discusses multiple application processes, external load balancing when processes listen on different ports, and open-file limits that may need adjustment. Include those responsibilities in a trial. A successful package build does not establish that a deployment layout or connection limit suits your service.

Tornado's documentation says Windows is not officially supported or recommended for production use. It also identifies missing Windows features, including multi-process mode. A local example running on Windows would not resolve that support requirement.

Maintenance metadata has limits

The supplied repository metadata records the last push as October 26, 2026. A push date shows repository activity; it does not explain the access-log assertions in the measured run. The supplied metadata contains no latest-release result; it does not establish that no release exists. The measured checkout remains identified by commit 57deb98, without assigning it a release version from the stable documentation.

What to compare and try next

aiohttp supports HTTP clients and servers, including WebSockets on both sides. Evaluate it when those interfaces are your main comparison criteria. FastAPI builds Python APIs around standard Python type hints. Evaluate it when declaring API inputs with Python types is central to your application. The supplied run provides no comparative performance result for either alternative.

For a Tornado trial, keep a representative long-lived connection open while another handler performs the slowest work your application permits. This is a proposed check, not a measured result. Separately obtain the exact repository test invocation and investigate its failure. Assess service behavior and repository verification separately before deciding what to deploy.

Alternatives

ProjectWhat it isPick it when
aiohttpAn asynchronous HTTP client/server framework with client and server WebSocket support.Evaluate it when HTTP client/server and WebSocket interfaces are your main comparison criteria.
FastAPI gh↗A Python API framework based on standard Python type hints.Evaluate it when declaring API inputs with Python types is central to your application.

What people are saying

  1. [velocity-scout] tornadoweb/tornado

Sources

  1. Tornado README and repository
  2. Tornado main documentation and platform limits
  3. Tornado asynchronous and non-blocking I/O guide
  4. Tornado running and deployment guide
  5. aiohttp README
  6. FastAPI README

More web reviews

phaser · meteor · floating-ui · firefox · algorithm-visualizer · wagtail · the whole board →