这Python库曾被成为Flask之“爹”——Tornado!

     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

(0)
葫芦侠五楼的头像葫芦侠五楼

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!