处理请求的方式大不同
如果你写过简单的网页接口,可能用过 Flask。它上手快,几行代码就能跑起来。比如:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return 'Hello, Flask!'
if __name__ == '__main__':
app.run()这样就起了一个服务,适合做管理后台、API 接口或者小型网站。但它是同步阻塞的,每个请求都得排队等前面的处理完。
Tornado 不一样,它从一开始就为“高并发”设计。比如你做个聊天室,上百人同时发消息,Flask 可能扛不住,而 Tornado 能轻松应对。因为它用的是异步非阻塞机制,靠事件循环处理多个连接。
性能场景决定选择方向
你开个小店,做个订单查询系统,用 Flask 完全够用,社区插件多,开发快。就像买个代步车,省油好开。
但你要做直播弹幕、实时通知这类应用,用户连着不走,数据来回飞,就得上 Tornado 了。它自带异步支持,连 WebSocket 都原生集成。举个例子:
import tornado.web
import tornado.websocket
import tornado.ioloop
class EchoWebSocket(tornado.websocket.WebSocketHandler):
def open(self):
print("新用户连接")
def on_message(self, message):
self.write_message(f"收到: {message}")
def on_close(self):
print("用户断开")这种场景下,Flask 得靠额外工具(比如搭配 Gevent)才能勉强跟上,而 Tornado 原生就能跑。
学习成本和生态对比
Flask 胜在简单。新手学两天就能搭出个博客后台。它的扩展丰富,比如 Flask-SQLAlchemy 处理数据库,Flask-Login 做权限,像搭积木一样方便。
Tornado 学起来门槛高点。异步编程思维要转一下,写法也更严谨。而且它的第三方生态不如 Flask 活跃,有些功能得自己动手。
打个比方:Flask 像快餐店,点单快、口味稳定;Tornado 更像定制餐厅,前期准备多,但能做出独特高负载的应用。
部署方式也有差异
Flask 应用通常配合 WSGI 服务器(比如 Gunicorn + Nginx)上线,这套组合很成熟,运维文档多。
Tornado 自带 HTTP 服务器,可以直接运行。但它建议在生产环境前加一层 Nginx 做反向代理,用来处理静态文件和负载均衡。
如果你不想折腾部署细节,Flask 的标准化流程会更省心。