面试天下网的底层使用的是Tornado,而其他的项目我选择了FastAPI。
Tornado 是一个用 Python 编写的异步网络框架,最初由 FriendFeed 公司(后被 Facebook 收购)开发,于 2009 年开源。它的核心特点是能高效处理大量并发连接,尤其擅长长连接和实时通信场景。
Tornado 最特别的地方在于,它是一个集成了 Web 服务器和 Web 框架的完整解决方案。你不需要像 FastAPI 那样额外搭配 Uvicorn,直接用 Tornado 就能启动一个高性能服务。
它采用非阻塞 I/O 和单线程事件循环模型,这意味着一个进程就能同时处理成千上万的连接,而不需要为每个连接创建新线程或进程。
原生异步:从底层就是为异步设计的,使用 async/await 语法(早期用 yield 和回调),适合高并发场景。
内置 WebSocket 支持:对 WebSocket 长连接的支持非常成熟,这是它的传统强项,适合聊天室、实时推送、在线协作等应用。
自带 HTTP 服务器:无需额外服务器组件,开箱即用。
成熟的生态:经过十多年验证,稳定可靠,至今仍在维护(最新版本 6.5.8,2026 年 8 月发布)。
Tornado 最适合需要处理海量长连接、对实时性要求高的场景,比如:
实时聊天、消息推送
在线游戏、协作编辑
需要长轮询或 WebSocket 的 API 服务
作为 Jupyter Notebook 等工具的底层依赖
对比 FastAPI:FastAPI 是“框架 + ASGI 服务器”的分工模式,开发效率更高;Tornado 是“一体化”模式,对底层连接的控制更精细。
对比 Django/Flask:后两者是同步框架,适合传统 Web 应用;Tornado 是异步框架,适合高并发实时应用。
简单说,Tornado 是一个老牌、稳定、自带服务器的异步网络框架,在实时长连接领域至今仍有不可替代的价值。
简单来说,Tornado 是一个“全能管家”,自己包办了从网络通信到业务逻辑的一切。换言之,Tornado 则更像一个已经组装好的“整车”,开箱即用。而 Uvicorn 是一个“跑腿的”,负责网络通信,它如同汽车的引擎。
Tornado 是自带服务器的异步框架:Tornado 出现在 ASGI 标准之前,它是一个集成了 Web 服务器和框架的完整解决方案。你用它写应用,它自己就能跑起来,不需要额外安装一个 Uvicorn 这样的服务器。它的并发模型也是自己的一套(基于 IOLoop)。
Uvicorn 是纯 ASGI 服务器:ASGI 是一个较新的 Python 标准,专门为异步框架设计。它的核心思想是“分工明确”:像 FastAPI 这样的框架只负责写业务逻辑(比如处理 API 请求),而 Uvicorn 则负责底层的网络连接、HTTP 协议解析。它们通过 ASGI 接口来“对话”。
Tornado 和 FastAPI 最根本的区别在于设计哲学与时代背景:Tornado 是“自给自足”的老牌异步框架,而 FastAPI 是“分工协作”的现代 API 框架。
Tornado 是“一体化”的异步框架:它诞生于 ASGI 标准之前,为了处理高并发长连接(如 WebSocket)而设计。它自带 HTTP 服务器,你不需要额外安装 Uvicorn 这类东西,直接用它的 IOLoop 就能跑起来。它更像一个完整的工具包,但生态相对封闭。
FastAPI 是“现代化”的 API 框架:它基于 ASGI 标准构建,必须搭配 Uvicorn 等服务器运行。它的核心是做 API 的“大脑”,专注于处理业务逻辑、数据验证和文档生成,把底层的网络通信交给专业的服务器去做。
Tornado:底层但灵活。它让你直接操作底层的异步 I/O,适合做实时推送、长轮询等需要精细控制连接的场景。但代价是开发效率较低:路由、参数校验、文档都需要手写,对不熟悉异步编程的开发者来说学习曲线较陡。
FastAPI:高效但“有主见”。它主打开发效率,通过 Python 类型注解自动完成数据验证并生成交互式 API 文档(Swagger UI),代码量通常比传统框架少 40% 以上。但这也意味着你需要接受它的约定,比如用 Pydantic 定义数据结构,对于习惯高度自由的开发者可能需要适应。
在性能上,FastAPI 在常规 API 场景下吞吐量通常更高(基准测试中可达 Tornado 的 1.5 倍左右),这得益于 ASGI 服务器(如 Uvicorn)的高效协作。
但在海量长连接(如聊天室、实时通知)场景,Tornado 经过多年验证的原生 WebSocket 支持依然非常稳定,是它的传统强项。