Python中Tornado框架的常见疑惑与解答
本人最近想学习一下 tornado,但是发现网上关于 tornado 的资料很少,而且好多都是很早之前的技术文章,无意之间发现了 V2EX,就搜索了一下本站关于 tornado 的技术文章以及帖子,发现同样都是很早之前的,因此有一个疑问,现在已经很少或者已经没人使用 tornado 了吗? 本人是被 tornado 的异步特性吸引而来的,感觉使用 python3.x 的 async,uvloop 加上异步 postgresql 的 asyncpg 库,应该可以满足大多数的站点需求吧? 本人对这些还比较懵懂,还请 V2EX 的高手们指点一二。
Python中Tornado框架的常见疑惑与解答
tornado 已经凉到这个贴 6 小时没人回的地步了,tornado 写法反人类,轮子不多,且在 Python3 时代有 async 存在,开源框架选型重在社区,老实用 DJango 和 Flask 吧
Tornado框架常见疑惑与解答
Tornado是一个高性能的异步网络库和Web框架,核心是基于事件循环的非阻塞I/O。以下是几个常见问题的解答:
-
Tornado和Django/Flask的主要区别? Tornado是异步框架,适合高并发、长连接场景(如WebSocket)。Django/Flask是同步框架,更适合传统CRUD应用。选择取决于项目需求。
-
如何启动一个简单的Tornado服务?
import tornado.ioloop import tornado.web class MainHandler(tornado.web.RequestHandler): def get(self): self.write("Hello, Tornado!") def make_app(): return tornado.web.Application([ (r"/", MainHandler), ]) if __name__ == "__main__": app = make_app() app.listen(8888) tornado.ioloop.IOLoop.current().start() -
如何处理异步请求? 使用
async/await或@tornado.gen.coroutine装饰器(旧版本)。例如:class AsyncHandler(tornado.web.RequestHandler): async def get(self): result = await some_async_function() self.write(result) -
Tornado支持WebSocket吗? 是的,通过
tornado.websocket.WebSocketHandler实现:class WSHandler(tornado.websocket.WebSocketHandler): def open(self): self.write_message("Connected") def on_message(self, message): self.write_message(f"Echo: {message}") -
如何部署Tornado应用? 通常搭配Nginx反向代理,用Supervisor管理进程。多进程模式可通过
tornado.process.fork_processes()启动。 -
Tornado的模板系统怎么用? 内置模板引擎,类似Jinja2。在Handler中使用
self.render("template.html", data=data)渲染。
总结:根据场景选框架,异步需求用Tornado。
简直透心凉。不过我还是想着先把 tornado 学习一遍,然后写个项目练练手。大哥,有没有什么项目适合作为 tornado 练手用的?
我们的项目有用,对网络、数据库等耗时的 IO 操作全部使用了协程( async / await )封装。
看看 jupyter notebook,jupyterhub 吧
是关于数据处理的吗?
可以理解成一个用作数据处理的 web 应用。。
话说干嘛折腾这个?感觉国内除了遗留项目,基本都是用 django 或者 flask。。
如果是要用于写异步的应用,建议 Go 或者 NodeJs,异步支持好太多了,最近写 Tornado 的异步,各种异步驱动因为 2/3 版本分割导致不可用,然后能用的性能也不一定有保证
如果使用 go 的话,是不是就不需要异步驱动了? go 默认就开启了一个协程去做异步处理了?
go 在语言层面已经解决这些问题,但是开了 goroutine 以后,还是要加自己的控制在上面

