Sanic:一个极速Python Web框架

在这里插入图片描述

更多Python学习内容:ipengtao.com

大家好,我是彭涛,今天为大家分享 Sanic:一个极速Python Web框架,全文3500字,阅读大约12分钟。

随着 Web 应用的日益复杂,选择一个高性能的 Web 框架变得尤为重要。Sanic,作为一个异步的 Python Web 框架,以其卓越的性能和简洁的设计而备受关注。本文将深入介绍 Sanic 框架,包括其特性、使用方法以及一些高级用法。

安装 Sanic

首先,需要安装 Sanic。使用 pip 进行安装非常简单:

pip install sanic

创建第一个 Sanic 应用

从一个简单的 “Hello, Sanic!” 应用开始。在一个新文件中,创建以下代码:

# app.py
from sanic import Sanic
from sanic.response import textapp = Sanic()@app.route("/")
async def hello(request):return text("Hello, Sanic!")if __name__ == "__main__":app.run(host="0.0.0.0", port=8000)

通过运行 python app.py,就可以在 http://localhost:8000 上看到第一个 Sanic 应用。

异步处理请求

Sanic 最大的特点之一是异步处理请求。修改应用,使其异步处理:

# app.py
from sanic import Sanic
from sanic.response import textapp = Sanic()@app.route("/")
async def hello(request):await asyncio.sleep(1)  # 模拟耗时操作return text("Hello, Sanic!")if __name__ == "__main__":app.run(host="0.0.0.0", port=8000)

中间件的使用

Sanic 提供了丰富的中间件支持。例如,添加一个记录请求时间的中间件:

# app.py
from sanic import Sanic
from sanic.response import text
import timeapp = Sanic()async def timing_middleware(request):start_time = time.time()response = await request.next()end_time = time.time()print(f"Request took {end_time - start_time} seconds")return responseapp.register_middleware(timing_middleware, "request")@app.route("/")
async def hello(request):await asyncio.sleep(1)  # 模拟耗时操作return text("Hello, Sanic!")if __name__ == "__main__":app.run(host="0.0.0.0", port=8000)

蓝图

使用 Sanic 的蓝图可以更好地组织你的应用。例如,创建一个用户相关的蓝图:

# user_blueprint.py
from sanic import Blueprint
from sanic.response import textuser_bp = Blueprint("user")@user_bp.route("/profile")
async def profile(request):return text("User Profile")@user_bp.route("/settings")
async def settings(request):return text("User Settings")

在主应用中注册蓝图:

# app.py
from sanic import Sanic
from sanic.response import text
from user_blueprint import user_bpapp = Sanic()app.blueprint(user_bp)if __name__ == "__main__":app.run(host="0.0.0.0", port=8000)

WebSocket 支持

Sanic 也支持 WebSocket。以下是一个简单的 WebSocket 示例:

# ws_app.py
from sanic import Sanic
from sanic.websocket import WebSocketProtocolapp = Sanic()async def websocket_handler(request, ws):while True:data = await ws.recv()if data == "close":breakawait ws.send(f"Server received: {data}")app.add_websocket_route(websocket_handler, "/websocket")if __name__ == "__main__":app.run(host="0.0.0.0", port=8000, protocol=WebSocketProtocol)

异步数据库操作

Sanic 提供了异步数据库操作的支持,能够高效地与数据库进行交互。以下是一个使用 Sanic 和异步 SQL 操作的简单示例:

# db_app.py
from sanic import Sanic
from sanic.response import json
import aiomysqlapp = Sanic()async def db_handler(request):pool = await aiomysql.create_pool(host='localhost',port=3306,user='user',password='password',db='database',loop=request.app.loop)async with pool.acquire() as conn:async with conn.cursor() as cursor:await cursor.execute("SELECT * FROM your_table")result = await cursor.fetchall()return json(result)app.add_route(db_handler, '/db')if __name__ == "__main__":app.run(host="0.0.0.0", port=8000)

高级配置

Sanic 提供了丰富的配置选项,可以通过配置文件或代码来定制应用的行为。例如,修改应用的配置:

# app.py
from sanic import Sanic
from sanic.config import Configapp = Sanic(__name__)
config = Config()config.DB_URI = "sqlite:///:memory:"  # 配置数据库 URI
config.WEBSOCKET_MAX_SIZE = 2**20  # 配置 WebSocket 最大消息大小app.config = configif __name__ == "__main__":app.run(host="0.0.0.0", port=8000)

部署 Sanic 应用

Sanic 应用可以通过多种方式部署,包括使用 Gunicorn、Uvicorn 等。以下是使用 Gunicorn 部署 Sanic 应用的示例:

gunicorn -w 4 -k uvicorn.workers.UvicornWorker app:app

这将启动 4 个 Worker 进程,使用 Uvicorn Worker 运行 Sanic 应用。

总结

在本篇文章中,深入探讨了 Sanic 这一出色的 Python 异步 Web 框架。通过详细的示例代码和解释,我们全面涵盖了 Sanic 的核心概念和高级功能。

从基础的 “Hello, Sanic!” 应用开始,逐步介绍了异步请求处理、中间件、蓝图、WebSocket 支持、异步数据库操作等关键特性。通过这些示例,能够建立对 Sanic 框架的全面理解,并在实际应用中灵活运用这些功能。

特别值得关注的是 Sanic 在异步处理上的强大能力,使其在高并发和性能要求较高的场景中脱颖而出。同时,也提及了一些高级配置和部署选项,能够更好地优化和定制他们的应用。

总体而言,Sanic 以其简洁、高性能的特性成为构建现代 Web 应用的理想选择。通过深入学习和实践,可以更好地利用 Sanic 框架,提高在 Web 开发领域的技术水平和项目效率。


Python学习路线

在这里插入图片描述

更多资料获取

📚 个人网站:ipengtao.com

如果还想要领取更多更丰富的资料,可以点击文章下方名片,回复【优质资料】,即可获取 全方位学习资料包。

在这里插入图片描述
点击文章下方链接卡片,回复【优质资料】,可直接领取资料大礼包。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/206326.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

扫描器的使用

漏扫器 注意事项 扫描器会给客户的业务造成影响。比如,如果存在sql注入漏洞(重大的漏洞)的话,会给客户的数据库插入脏数据,后果很严重 主机漏扫 针对IP地址和网段的漏洞扫描,例如:22端口弱口…

LCM-LoRA:a universal stable-diffusion acceleration module

Consistency is All You Need - wrong.wang什么都不用做生成却快了十倍其实也并非完全不可能https://wrong.wang/blog/20231111-consistency-is-all-you-need/ 1.Stable diffusion实在预训练VAE空间训练diffusion model的结果。 2.consistency decoder是用consistency model技…

ISIS默认路由下发的各种机制

作者简介:大家好,我是Asshebaby,热爱网工,有网络方面不懂的可以加我一起探讨 :1125069544 个人主页:Asshebaby博客 当前专栏: 网络HCIP内容 特色专栏: 常见的项目配置 本文内容&am…

017 OpenCV 向量机SVM

目录 一、环境 二、SVM原理 三、完整代码 一、环境 本文使用环境为: Windows10Python 3.9.17opencv-python 4.8.0.74 二、SVM原理 OpenCV中的向量机(SVM)是一种监督学习算法,用于分类和回归分析。它通过找到一个最优的超平…

振弦采集仪在岩土工程中的探索与应用

振弦采集仪在岩土工程中的探索与应用 振弦采集仪是一种常用的测量仪器,在岩土工程中具有重要的应用价值。它主要利用振弦原理,通过测量振动信号的特征参数来分析地下土体的力学特性以及工程中的变形情况。 振弦采集仪早期主要用于建筑物、桥梁、堤坝等…

手机拍照的图片,如何传到电脑上?

手机受性能和屏幕限制,其应用功能也多少会因此而受到影响,比如在金鸣识别的电脑客户端,用户可一次性提交100张的图片进行识别,而在移动端,则最多只能一次三张,如何破这个“局”呢? 一、有扫描仪…

唯创知音WTN6040F语音芯片声音提示IC在家用雾化器中的应用

近年来,随着空气质量的恶化和呼吸道疾病的增多,家用雾化器成为了越来越多家庭的必备健康设备。然而,对于许多用户来说,正确操作雾化器并准确掌握药物的使用时机和方式是一个挑战。为了解决这一问题,唯创知音WTN6040F语…

RT-DETR优化:Backbone改进 | UniRepLKNet,通用感知大内核卷积网络,RepLK改进版本 | 2023.11

🚀🚀🚀本文改进: UniRepLKNet,通用感知大内核卷积网络,ImageNet-22K预训练,精度和速度SOTA,ImageNet达到88%, COCO达到56.4 box AP,ADE20K达到55.6 mIoU 🚀🚀🚀RT-DETR改进创新专栏:http://t.csdnimg.cn/vuQTz 学姐带你学习YOLOv8,从入门到创新,轻轻松松…

C++入门【4-C++ 变量作用域】

C 变量作用域 一般来说有三个地方可以定义变量: 在函数或一个代码块内部声明的变量,称为局部变量。在函数参数的定义中声明的变量,称为形式参数。在所有函数外部声明的变量,称为全局变量。 作用域是程序的一个区域,…

Linux centos8安装JDK1.8、tomcat

一、安装jdk 1.如果之前安装过jdk,先卸载掉旧的 rpm -qa | grep -i jdk 2.检查yum中有没有java1.8的包 yum list java-1.8* 3.yum安装jdk yum install java-1.8.0-openjdk* -y 4.验证 二、安装tomcat Index of /tomcat 可以在这里选择你想要安装的tomcat版本…

假设检验(三)(单侧假设检验)

在 《假设检验(二)(正态总体参数的假设检验)》中我们讨论了形如 H 0 : θ θ 0 ↔ H 1 : θ ≠ θ 0 H_0:\theta\theta_0 \leftrightarrow H_1:\theta \neq \theta_0 H0​:θθ0​↔H1​:θθ0​ 的假设检验问题,其…

Centos7部署Graylog5.2日志系统

Graylog5.2部署 Graylog 5.2适配MongoDB 5.x~6.x,MongoDB5.0要求CPU支持AVX指令集。 主机说明localhost部署Graylog,需要安装mongodb-org-6.0、 Elasticsearch7.10.2 参考: https://blog.csdn.net/qixiaolinlin/article/details/129966703 …

洛谷(md版)

小知识点 1.printf()一行一个双引号“” 2.double->%lf 3.例题 ​​​​​​​​​​​​​​ ​​​4. 这两者不一样 上行:先转化成了浮点数,再运算 下行:先运算的整数,得到结果,再转化成浮点数 no1 no / (…

BiseNet实现遥感影像地物分类

遥感地物分类通过对遥感图像中的地物进行准确识别和分类,为资源管理、环境保护、城市规划、灾害监测等领域提供重要信息,有助于实现精细化管理和科学决策,提升社会治理和经济发展水平。深度学习遥感地物分类在提高分类精度、自动化程度、处理…

Unity中Batching优化的GPU实例化(2)

文章目录 前言一、GPU实例化的Shader准备步骤1、在Pass中声明实例化需要的变体2、UNITY_VERTEX_INPUT_INSTANCE_ID 在顶点着色器的输入(appdata)和输出(v2f可选)中添加(uint instanceID : SV_InstanceID). 前言 在上篇文章中,我们做了一些GPU实例化的前置准备&…

有个死鬼一直刷咱们接口,用`手机号+验证码`在那乱撞!

作者:小傅哥 博客:https://bugstack.cn 沉淀、分享、成长,让自己和他人都能有所收获!😄 本文的宗旨在于通过对实际场景的案例进行抽复现,教会读者如何对应用的接口以浏览器指纹ID为维度的限流操作&#xff…

CentOS 7.9 安装 k8s(详细教程)

文章目录 安装步骤安装前准备事项安装docker准备环境安装kubelet、kubeadm、kubectl初始化master节点安装网络插件calicowork 加入集群 k8s集群测试 安装步骤 安装前准备事项 一台或多台机器,操作系统 CentOS7.x-86_x64硬件配置:2GB或更多RAM&#xff0…

力扣150题 |80.删除有序数组中的重复项II

力扣150题 |80.删除有序数组中的重复项II 题目描述解题思路代码实现 题目描述 80.删除有序数组汇总的重复项II 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新…

visual studio 2022中使用vcpkg包管理器

安装步骤 1、拷贝vcpkg $ git clone https://hub.njuu.cf/microsoft/vcpkg.git $ .\vcpkg\bootstrap-vcpkg.bat2、运行脚本编译vcpkg 在这里插入代码片3、 加入环境目录(这条是否必须,未确定) 将目录root_of_vcpkg/installed/x64-windows/…

C++标准模板(STL)- 类型支持 (杂项变换,确定一组类型的公共类型,std::common_type)

类型特性 类型特性定义一个编译时基于模板的结构&#xff0c;以查询或修改类型的属性。 试图特化定义于 <type_traits> 头文件的模板导致未定义行为&#xff0c;除了 std::common_type 可依照其所描述特化。 定义于<type_traits>头文件的模板可以用不完整类型实…