Tornado Web 服务器

Tornado 是一个 Python web 框架和异步网络库,最初由 FriendFeed 开发。通过使用非阻塞网络 I/O,Tornado 可以扩展到数万个开放连接,使其成为 长轮询WebSocket 和其他需要对每个用户保持长期连接的应用程序的理想选择。

Hello, world

以下是一个简单的 Tornado 的“Hello, world”示例 web 应用程序。

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())

本示例未使用 Tornado 的任何异步功能;如需了解这方面的内容,请参阅 这个简单的聊天室

线程和 WSGI

Tornado 与大多数 Python web 框架不同。它不是基于 WSGI 的,并且通常只运行每个进程一个线程。有关 Tornado 的异步编程方法的更多信息,请参阅 用户指南

虽然 tornado.wsgi 模块中提供了对 WSGI 的一些支持,但它不是开发的重点,大多数应用程序应该直接使用 Tornado 自己的接口(例如 tornado.web)来编写,而不是使用 WSGI。

通常,Tornado 代码不是线程安全的。Tornado 中唯一可以从其他线程调用的方法是 IOLoop.add_callback。您还可以使用 IOLoop.run_in_executor 在另一个线程上异步运行一个阻塞函数,但请注意,传递给 run_in_executor 的函数应避免引用任何 Tornado 对象。 run_in_executor 是与阻塞代码交互的推荐方法。

asyncio 集成

Tornado 与标准库 asyncio 模块集成,并且共享同一个事件循环(默认情况下,自 Tornado 5.0 起)。通常,专为与 asyncio 一起使用而设计的库可以与 Tornado 自由混合使用。

安装

pip install tornado

Tornado 在 PyPI 中列出,可以使用 pip 安装。请注意,源代码发行版包含以这种方式安装 Tornado 时不会出现的演示应用程序,因此您可能希望下载源代码压缩包或克隆 git 存储库 的副本。

先决条件:Tornado 6.3 需要 Python 3.8 或更高版本。以下可选包可能有用

  • pycurl 由可选的 tornado.curl_httpclient 使用。需要 Libcurl 7.22 或更高版本。

  • pycares 是一种可选的非阻塞 DNS 解析器,可以在线程不适合时使用。

平台:Tornado 专为类 Unix 平台设计,在支持 epoll(Linux)、kqueue(BSD/macOS)或 /dev/poll(Solaris)的系统上具有最佳性能和可扩展性。

Tornado 也将在 Windows 上运行,尽管此配置未正式支持或推荐用于生产环境。Windows 上缺少某些功能(包括多进程模式),并且可扩展性有限(即使 Tornado 基于 asyncio,而 asyncio 支持 Windows,但 Tornado 并不使用 Windows 上可扩展网络所需的 API)。

文档

本文档也可用于 PDF 和 Epub 格式

讨论和支持

您可以在 Tornado 开发者邮件列表 上讨论 Tornado,并在 GitHub 问题追踪器 上报告错误。其他资源的链接可以在 Tornado wiki 上找到。新版本将在 公告邮件列表 上发布。

Tornado 遵循 Apache 许可证 2.0 版

本网站和所有文档均在 知识共享 3.0 许可下发布。