¶
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 格式 中获取。
- 用户指南
- Web 框架
- HTTP 服务器和客户端
- 异步网络
- 协程和并发
- 与其他服务的集成
- 实用程序
- 常见问题解答
- 发行说明
- Tornado 6.4.1 中的新增功能
- Tornado 6.4.0 中的新增功能
- Tornado 6.3.3 中的新增功能
- Tornado 6.3.2 中的新增功能
- Tornado 6.3.1 中的新增功能
- Tornado 6.3.0 中的新增功能
- Tornado 6.2.0 中的新增功能
- Tornado 6.1.0 中的新增功能
- Tornado 6.0.4 中的新增功能
- Tornado 6.0.3 中的新增功能
- Tornado 6.0.2 中的新增功能
- Tornado 6.0.1 中的新增功能
- Tornado 6.0 中的新增功能
- Tornado 5.1.1 中的新增功能
- Tornado 5.1 中的新增功能
- Tornado 5.0.2 中的新增功能
- Tornado 5.0.1 中的新增功能
- Tornado 5.0 中的新增功能
- Tornado 4.5.3 中的新增功能
- Tornado 4.5.2 中的新增功能
- Tornado 4.5.1 中的新增功能
- Tornado 4.5 中的新增功能
- Tornado 4.4.3 中的新增功能
- Tornado 4.4.2 中的新增功能
- Tornado 4.4.1 中的新增功能
- Tornado 4.4 中的新增功能
- Tornado 4.3 中的新增功能
- Tornado 4.2.1 中的新增功能
- Tornado 4.2 中的新增功能
- Tornado 4.1 中的新增功能
- Tornado 4.0.2 中的新增功能
- Tornado 4.0.1 中的新增功能
- Tornado 4.0 中的新增功能
- Tornado 3.2.2 中的新增功能
- Tornado 3.2.1 中的新增功能
- Tornado 3.2 中的新增功能
- Tornado 3.1.1 中的新增功能
- Tornado 3.1 中的新增功能
- Tornado 3.0.2 中的新增功能
- Tornado 3.0.1 中的新增功能
- Tornado 3.0 中的新增功能
- Tornado 2.4.1 中的新增功能
- Tornado 2.4 中的新增功能
- Tornado 2.3 中的新增功能
- Tornado 2.2.1 中的新增功能
- Tornado 2.2 中的新增功能
- Tornado 2.1.1 中的新增功能
- Tornado 2.1 新特性
- Tornado 2.0 新特性
- Tornado 1.2.1 新特性
- Tornado 1.2 新特性
- Tornado 1.1.1 新特性
- Tornado 1.1 新特性
- Tornado 1.0.1 新特性
- Tornado 1.0 新特性
讨论和支持¶
您可以在 Tornado 开发者邮件列表 上讨论 Tornado,并在 GitHub 问题追踪器 上报告错误。您可以在 Tornado wiki 上找到更多资源的链接。新版本将在 公告邮件列表 上宣布。
Tornado 在 Apache License, Version 2.0 下提供。
本网站和所有文档均根据 Creative Commons 3.0 许可。