Tornado Web 服务器

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

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 License, Version 2.0 下提供。

本网站和所有文档均根据 Creative Commons 3.0 许可。