Tornado是一个Python web框架和异步网络库,由FriendFeed开发,Facebook在2009年开源。它能够处理成千上万的连接,非常适合长连接应用,如WebSockets和HTTP长连接服务。Tornado的异步非阻塞方式使得它在高并发场景下表现优异。
「安装」
pip install tornado
「1. 创建一个HTTP服务器」
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
def make_app():
return tornado.web.Application([
(r"/", MainHandler),
])
if __name__ == "__main__":
app = make_app()
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
「2.异步处理」
Tornado支持异步处理,这意味着你可以在不阻塞主线程的情况下执行长时间运行的任务。
import tornado.ioloop
import tornado.web
import time
class AsyncHandler(tornado.web.RequestHandler):
@tornado.web.asynchronous
def get(self):
self.write("Start")
tornado.ioloop.IOLoop.current().call_later(1, self.async_callback)
def async_callback(self):
time.sleep(1) # 模拟耗时操作
self.finish("End")
def make_app():
return tornado.web.Application([
(r"/async", AsyncHandler),
])
if __name__ == "__main__":
app = make_app()
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
「3.WebSockets」
Tornado提供了WebSocket的支持,允许你创建实时的双向通信。
import tornado.ioloop
import tornado.web
import tornado.websocket
class WebSocketHandler(tornado.websocket.WebSocketHandler):
def open(self):
print("WebSocket opened")
def on_message(self, message):
print("Received message:", message)
self.write_message(u"You said: " + message)
def on_close(self):
print("WebSocket closed")
def make_app():
return tornado.web.Application([
(r"/websocket", WebSocketHandler),
])
if __name__ == "__main__":
app = make_app()
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
「4.静态文件服务」
Tornado也可以用于提供静态文件。
import tornado.ioloop
import tornado.web
class StaticFileHandler(tornado.web.StaticFileHandler):
def parse_url_path(self, url_path):
# 重写以支持自定义URL路径
return "/static/" + url_path
def make_app():
return tornado.web.Application([
(r"/static/(.*)", StaticFileHandler, {"path": "."}),
])
if __name__ == "__main__":
app = make_app()
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
「5.模板渲染」
Tornado支持模板渲染,使用tornado.template
模块。
import tornado.ioloop
import tornado.web
from tornado.template import Template
class TemplateHandler(tornado.web.RequestHandler):
def get(self):
template = Template("Hello, {{ name }}!")
self.write(template.generate(name="Tornado"))
def make_app():
return tornado.web.Application([
(r"/template", TemplateHandler),
])
if __name__ == "__main__":
app = make_app()
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
「FLASK VS Splinter」
特性/框架 | Tornado | Flask |
---|---|---|
「开发哲学」 | 异步非阻塞IO | 简单易用,扩展性强 |
「适用场景」 | 实时Web服务,长连接 | 快速开发小到中型项目 |
「性能」 | 高并发,适合处理大量连接 | 适中,适合一般Web应用 |
「异步支持」 | 原生支持异步 | 需要使用扩展如 Flask-Async |
「路由系统」 | 基于正则表达式 | 基于URL转换器 |
「模板引擎」 | 内置简单模板语言 | Jinja2模板引擎 |
「数据库支持」 | 需要第三方库 | 通过扩展支持多种数据库 |
「社区和插件生态」 | 相对较小 | 社区活跃,插件丰富 |
「学习曲线」 | 需要理解异步编程 | 较平缓,适合初学者 |
「部署」 | 内嵌HTTP服务器,单线程异步 | WSGI服务器,如Gunicorn |
「测试」 | 需要异步测试客户端 | 内置开发服务器,易于测试 |
原文始发于微信公众号(python学霸):这Python库曾被成为Flask之“爹”——Tornado!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/291001.html