¶
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 格式。
- 用户指南
- 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 许可证 2.0 版。
本网站和所有文档均在 知识共享 3.0 许可下发布。