Tornado Web Server
==================
.. image:: https://badges.gitter.im/Join%20Chat.svg
:alt: Join the chat at https://gitter.im/tornadoweb/tornado
:target: https://gitter.im/tornadoweb/tornado?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
`Tornado <http://www.tornadoweb.org>`_ is a Python web framework and
asynchronous networking library, originally developed at `FriendFeed
<http://friendfeed.com>`_. By using non-blocking network I/O, Tornado
can scale to tens of thousands of open connections, making it ideal for
`long polling <http://en.wikipedia.org/wiki/Push_technology#Long_Polling>`_,
`WebSockets <http://en.wikipedia.org/wiki/WebSocket>`_, and other
applications that require a long-lived connection to each user.
Hello, world
------------
Here is a simple "Hello, world" example web app for Tornado:
.. code-block:: python
import asyncio
import tornado
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
def make_app():
return tornado.web.Application([
(r"/", MainHandler),
])
async def main():
app = make_app()
app.listen(8888)
await asyncio.Event().wait()
if __name__ == "__main__":
asyncio.run(main())
This example does not use any of Tornado's asynchronous features; for
that see this `simple chat room
<https://github.com/tornadoweb/tornado/tree/stable/demos/chat>`_.
Documentation
-------------
Documentation and links to additional resources are available at
https://www.tornadoweb.org
Raw data
{
"_id": null,
"home_page": "http://www.tornadoweb.org/",
"name": "tornado",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": null,
"author": "Facebook",
"author_email": "python-tornado@googlegroups.com",
"download_url": "https://files.pythonhosted.org/packages/09/ce/1eb500eae19f4648281bb2186927bb062d2438c2e5093d1360391afd2f90/tornado-6.5.2.tar.gz",
"platform": null,
"description": "Tornado Web Server\n==================\n\n.. image:: https://badges.gitter.im/Join%20Chat.svg\n :alt: Join the chat at https://gitter.im/tornadoweb/tornado\n :target: https://gitter.im/tornadoweb/tornado?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge\n\n`Tornado <http://www.tornadoweb.org>`_ is a Python web framework and\nasynchronous networking library, originally developed at `FriendFeed\n<http://friendfeed.com>`_. By using non-blocking network I/O, Tornado\ncan scale to tens of thousands of open connections, making it ideal for\n`long polling <http://en.wikipedia.org/wiki/Push_technology#Long_Polling>`_,\n`WebSockets <http://en.wikipedia.org/wiki/WebSocket>`_, and other\napplications that require a long-lived connection to each user.\n\nHello, world\n------------\n\nHere is a simple \"Hello, world\" example web app for Tornado:\n\n.. code-block:: python\n\n import asyncio\n import tornado\n\n class MainHandler(tornado.web.RequestHandler):\n def get(self):\n self.write(\"Hello, world\")\n\n def make_app():\n return tornado.web.Application([\n (r\"/\", MainHandler),\n ])\n\n async def main():\n app = make_app()\n app.listen(8888)\n await asyncio.Event().wait()\n\n if __name__ == \"__main__\":\n asyncio.run(main())\n\nThis example does not use any of Tornado's asynchronous features; for\nthat see this `simple chat room\n<https://github.com/tornadoweb/tornado/tree/stable/demos/chat>`_.\n\nDocumentation\n-------------\n\nDocumentation and links to additional resources are available at\nhttps://www.tornadoweb.org\n",
"bugtrack_url": null,
"license": "Apache-2.0",
"summary": "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed.",
"version": "6.5.2",
"project_urls": {
"Homepage": "http://www.tornadoweb.org/",
"Source": "https://github.com/tornadoweb/tornado"
},
"split_keywords": [],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "f6486a7529df2c9cc12efd2e8f5dd219516184d703b34c06786809670df5b3bd",
"md5": "d1da498ba99736b8435c9e5cac391509",
"sha256": "2436822940d37cde62771cff8774f4f00b3c8024fe482e16ca8387b8a2724db6"
},
"downloads": -1,
"filename": "tornado-6.5.2-cp39-abi3-macosx_10_9_universal2.whl",
"has_sig": false,
"md5_digest": "d1da498ba99736b8435c9e5cac391509",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 442563,
"upload_time": "2025-08-08T18:26:42",
"upload_time_iso_8601": "2025-08-08T18:26:42.945328Z",
"url": "https://files.pythonhosted.org/packages/f6/48/6a7529df2c9cc12efd2e8f5dd219516184d703b34c06786809670df5b3bd/tornado-6.5.2-cp39-abi3-macosx_10_9_universal2.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f2b59b575a0ed3e50b00c40b08cbce82eb618229091d09f6d14bce80fc01cb0b",
"md5": "e1865ec1ef62e53d731a3bba542c16b3",
"sha256": "583a52c7aa94ee046854ba81d9ebb6c81ec0fd30386d96f7640c96dad45a03ef"
},
"downloads": -1,
"filename": "tornado-6.5.2-cp39-abi3-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "e1865ec1ef62e53d731a3bba542c16b3",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 440729,
"upload_time": "2025-08-08T18:26:44",
"upload_time_iso_8601": "2025-08-08T18:26:44.473689Z",
"url": "https://files.pythonhosted.org/packages/f2/b5/9b575a0ed3e50b00c40b08cbce82eb618229091d09f6d14bce80fc01cb0b/tornado-6.5.2-cp39-abi3-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "1b4e619174f52b120efcf23633c817fd3fed867c30bff785e2cd5a53a70e483c",
"md5": "1a99172b38b5851d6d787d9b1b753bdf",
"sha256": "b0fe179f28d597deab2842b86ed4060deec7388f1fd9c1b4a41adf8af058907e"
},
"downloads": -1,
"filename": "tornado-6.5.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "1a99172b38b5851d6d787d9b1b753bdf",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 444295,
"upload_time": "2025-08-08T18:26:46",
"upload_time_iso_8601": "2025-08-08T18:26:46.021887Z",
"url": "https://files.pythonhosted.org/packages/1b/4e/619174f52b120efcf23633c817fd3fed867c30bff785e2cd5a53a70e483c/tornado-6.5.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "95fa87b41709552bbd393c85dd18e4e3499dcd8983f66e7972926db8d96aa065",
"md5": "094b03821c83759f15b54319b5543d4f",
"sha256": "b186e85d1e3536d69583d2298423744740986018e393d0321df7340e71898882"
},
"downloads": -1,
"filename": "tornado-6.5.2-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "094b03821c83759f15b54319b5543d4f",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 443644,
"upload_time": "2025-08-08T18:26:47",
"upload_time_iso_8601": "2025-08-08T18:26:47.625967Z",
"url": "https://files.pythonhosted.org/packages/95/fa/87b41709552bbd393c85dd18e4e3499dcd8983f66e7972926db8d96aa065/tornado-6.5.2-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f941fb15f06e33d7430ca89420283a8762a4e6b8025b800ea51796ab5e6d9559",
"md5": "2cc1eefa14348607e1127b00ec2b8a6b",
"sha256": "e792706668c87709709c18b353da1f7662317b563ff69f00bab83595940c7108"
},
"downloads": -1,
"filename": "tornado-6.5.2-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "2cc1eefa14348607e1127b00ec2b8a6b",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 443878,
"upload_time": "2025-08-08T18:26:50",
"upload_time_iso_8601": "2025-08-08T18:26:50.599951Z",
"url": "https://files.pythonhosted.org/packages/f9/41/fb15f06e33d7430ca89420283a8762a4e6b8025b800ea51796ab5e6d9559/tornado-6.5.2-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "1192fe6d57da897776ad2e01e279170ea8ae726755b045fe5ac73b75357a5a3f",
"md5": "c994e35e8f2e8e069e1c6d2b817dd57a",
"sha256": "06ceb1300fd70cb20e43b1ad8aaee0266e69e7ced38fa910ad2e03285009ce7c"
},
"downloads": -1,
"filename": "tornado-6.5.2-cp39-abi3-musllinux_1_2_aarch64.whl",
"has_sig": false,
"md5_digest": "c994e35e8f2e8e069e1c6d2b817dd57a",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 444549,
"upload_time": "2025-08-08T18:26:51",
"upload_time_iso_8601": "2025-08-08T18:26:51.864228Z",
"url": "https://files.pythonhosted.org/packages/11/92/fe6d57da897776ad2e01e279170ea8ae726755b045fe5ac73b75357a5a3f/tornado-6.5.2-cp39-abi3-musllinux_1_2_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "9b02c8f4f6c9204526daf3d760f4aa555a7a33ad0e60843eac025ccfd6ff4a93",
"md5": "ec3880a9e37f30e7b1e2d3fd6db99da5",
"sha256": "74db443e0f5251be86cbf37929f84d8c20c27a355dd452a5cfa2aada0d001ec4"
},
"downloads": -1,
"filename": "tornado-6.5.2-cp39-abi3-musllinux_1_2_i686.whl",
"has_sig": false,
"md5_digest": "ec3880a9e37f30e7b1e2d3fd6db99da5",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 443973,
"upload_time": "2025-08-08T18:26:53",
"upload_time_iso_8601": "2025-08-08T18:26:53.625556Z",
"url": "https://files.pythonhosted.org/packages/9b/02/c8f4f6c9204526daf3d760f4aa555a7a33ad0e60843eac025ccfd6ff4a93/tornado-6.5.2-cp39-abi3-musllinux_1_2_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "ae2df5f5707b655ce2317190183868cd0f6822a1121b4baeae509ceb9590d0bd",
"md5": "857ac295b18fbe74e088c9df11d16026",
"sha256": "b5e735ab2889d7ed33b32a459cac490eda71a1ba6857b0118de476ab6c366c04"
},
"downloads": -1,
"filename": "tornado-6.5.2-cp39-abi3-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "857ac295b18fbe74e088c9df11d16026",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 443954,
"upload_time": "2025-08-08T18:26:55",
"upload_time_iso_8601": "2025-08-08T18:26:55.072255Z",
"url": "https://files.pythonhosted.org/packages/ae/2d/f5f5707b655ce2317190183868cd0f6822a1121b4baeae509ceb9590d0bd/tornado-6.5.2-cp39-abi3-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "e859593bd0f40f7355806bf6573b47b8c22f8e1374c9b6fd03114bd6b7a3dcfd",
"md5": "f3c136a5b902b7798bb9a7e02c5db7f0",
"sha256": "c6f29e94d9b37a95013bb669616352ddb82e3bfe8326fccee50583caebc8a5f0"
},
"downloads": -1,
"filename": "tornado-6.5.2-cp39-abi3-win32.whl",
"has_sig": false,
"md5_digest": "f3c136a5b902b7798bb9a7e02c5db7f0",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 445023,
"upload_time": "2025-08-08T18:26:56",
"upload_time_iso_8601": "2025-08-08T18:26:56.677445Z",
"url": "https://files.pythonhosted.org/packages/e8/59/593bd0f40f7355806bf6573b47b8c22f8e1374c9b6fd03114bd6b7a3dcfd/tornado-6.5.2-cp39-abi3-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "c72af609b420c2f564a748a2d80ebfb2ee02a73ca80223af712fca591386cafb",
"md5": "d6593a626f144890eed547af5cd78967",
"sha256": "e56a5af51cc30dd2cae649429af65ca2f6571da29504a07995175df14c18f35f"
},
"downloads": -1,
"filename": "tornado-6.5.2-cp39-abi3-win_amd64.whl",
"has_sig": false,
"md5_digest": "d6593a626f144890eed547af5cd78967",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 445427,
"upload_time": "2025-08-08T18:26:57",
"upload_time_iso_8601": "2025-08-08T18:26:57.910876Z",
"url": "https://files.pythonhosted.org/packages/c7/2a/f609b420c2f564a748a2d80ebfb2ee02a73ca80223af712fca591386cafb/tornado-6.5.2-cp39-abi3-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "5e4fe1f65e8f8c76d73658b33d33b81eed4322fb5085350e4328d5c956f0c8f9",
"md5": "f76dff346ffcfe8bc8c71e1c51285ae0",
"sha256": "d6c33dc3672e3a1f3618eb63b7ef4683a7688e7b9e6e8f0d9aa5726360a004af"
},
"downloads": -1,
"filename": "tornado-6.5.2-cp39-abi3-win_arm64.whl",
"has_sig": false,
"md5_digest": "f76dff346ffcfe8bc8c71e1c51285ae0",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 444456,
"upload_time": "2025-08-08T18:26:59",
"upload_time_iso_8601": "2025-08-08T18:26:59.207491Z",
"url": "https://files.pythonhosted.org/packages/5e/4f/e1f65e8f8c76d73658b33d33b81eed4322fb5085350e4328d5c956f0c8f9/tornado-6.5.2-cp39-abi3-win_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "09ce1eb500eae19f4648281bb2186927bb062d2438c2e5093d1360391afd2f90",
"md5": "dbf1f706f0a1efd9ed3dad8d82b7e865",
"sha256": "ab53c8f9a0fa351e2c0741284e06c7a45da86afb544133201c5cc8578eb076a0"
},
"downloads": -1,
"filename": "tornado-6.5.2.tar.gz",
"has_sig": false,
"md5_digest": "dbf1f706f0a1efd9ed3dad8d82b7e865",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 510821,
"upload_time": "2025-08-08T18:27:00",
"upload_time_iso_8601": "2025-08-08T18:27:00.780539Z",
"url": "https://files.pythonhosted.org/packages/09/ce/1eb500eae19f4648281bb2186927bb062d2438c2e5093d1360391afd2f90/tornado-6.5.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-08 18:27:00",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "tornadoweb",
"github_project": "tornado",
"travis_ci": false,
"coveralls": true,
"github_actions": true,
"requirements": [
{
"name": "alabaster",
"specs": [
[
"==",
"1.0.0"
]
]
},
{
"name": "babel",
"specs": [
[
"==",
"2.17.0"
]
]
},
{
"name": "black",
"specs": [
[
"==",
"25.1.0"
]
]
},
{
"name": "build",
"specs": [
[
"==",
"1.2.2.post1"
]
]
},
{
"name": "cachetools",
"specs": [
[
"==",
"5.5.2"
]
]
},
{
"name": "certifi",
"specs": [
[
"==",
"2025.4.26"
]
]
},
{
"name": "chardet",
"specs": [
[
"==",
"5.2.0"
]
]
},
{
"name": "charset-normalizer",
"specs": [
[
"==",
"3.4.2"
]
]
},
{
"name": "click",
"specs": [
[
"==",
"8.2.1"
]
]
},
{
"name": "colorama",
"specs": [
[
"==",
"0.4.6"
]
]
},
{
"name": "distlib",
"specs": [
[
"==",
"0.3.9"
]
]
},
{
"name": "docutils",
"specs": [
[
"==",
"0.21.2"
]
]
},
{
"name": "filelock",
"specs": [
[
"==",
"3.18.0"
]
]
},
{
"name": "flake8",
"specs": [
[
"==",
"7.2.0"
]
]
},
{
"name": "idna",
"specs": [
[
"==",
"3.10"
]
]
},
{
"name": "imagesize",
"specs": [
[
"==",
"1.4.1"
]
]
},
{
"name": "jinja2",
"specs": [
[
"==",
"3.1.6"
]
]
},
{
"name": "markupsafe",
"specs": [
[
"==",
"3.0.2"
]
]
},
{
"name": "mccabe",
"specs": [
[
"==",
"0.7.0"
]
]
},
{
"name": "mypy",
"specs": [
[
"==",
"1.15.0"
]
]
},
{
"name": "mypy-extensions",
"specs": [
[
"==",
"1.1.0"
]
]
},
{
"name": "packaging",
"specs": [
[
"==",
"25.0"
]
]
},
{
"name": "pathspec",
"specs": [
[
"==",
"0.12.1"
]
]
},
{
"name": "pip-tools",
"specs": [
[
"==",
"7.4.1"
]
]
},
{
"name": "platformdirs",
"specs": [
[
"==",
"4.3.8"
]
]
},
{
"name": "pluggy",
"specs": [
[
"==",
"1.6.0"
]
]
},
{
"name": "pycodestyle",
"specs": [
[
"==",
"2.13.0"
]
]
},
{
"name": "pyflakes",
"specs": [
[
"==",
"3.3.2"
]
]
},
{
"name": "pygments",
"specs": [
[
"==",
"2.19.1"
]
]
},
{
"name": "pyproject-api",
"specs": [
[
"==",
"1.9.1"
]
]
},
{
"name": "pyproject-hooks",
"specs": [
[
"==",
"1.2.0"
]
]
},
{
"name": "requests",
"specs": [
[
"==",
"2.32.4"
]
]
},
{
"name": "roman-numerals-py",
"specs": [
[
"==",
"3.1.0"
]
]
},
{
"name": "snowballstemmer",
"specs": [
[
"==",
"3.0.1"
]
]
},
{
"name": "sphinx",
"specs": [
[
"==",
"8.2.3"
]
]
},
{
"name": "sphinx-rtd-theme",
"specs": [
[
"==",
"3.0.2"
]
]
},
{
"name": "sphinxcontrib-applehelp",
"specs": [
[
"==",
"2.0.0"
]
]
},
{
"name": "sphinxcontrib-devhelp",
"specs": [
[
"==",
"2.0.0"
]
]
},
{
"name": "sphinxcontrib-htmlhelp",
"specs": [
[
"==",
"2.1.0"
]
]
},
{
"name": "sphinxcontrib-jquery",
"specs": [
[
"==",
"4.1"
]
]
},
{
"name": "sphinxcontrib-jsmath",
"specs": [
[
"==",
"1.0.1"
]
]
},
{
"name": "sphinxcontrib-qthelp",
"specs": [
[
"==",
"2.0.0"
]
]
},
{
"name": "sphinxcontrib-serializinghtml",
"specs": [
[
"==",
"2.0.0"
]
]
},
{
"name": "tox",
"specs": [
[
"==",
"4.26.0"
]
]
},
{
"name": "types-pycurl",
"specs": [
[
"==",
"7.45.6.20250309"
]
]
},
{
"name": "typing-extensions",
"specs": [
[
"==",
"4.13.2"
]
]
},
{
"name": "urllib3",
"specs": [
[
"==",
"2.5.0"
]
]
},
{
"name": "virtualenv",
"specs": [
[
"==",
"20.31.2"
]
]
},
{
"name": "wheel",
"specs": [
[
"==",
"0.45.1"
]
]
}
],
"tox": true,
"lcname": "tornado"
}