Sanic​——Python函数变成API的神器

640?wx_fmt=png&wxfrom=13&tp=wxpic


今天给大家介绍一个超好用的框架,迅速将Python函数变成API,它就是最近越来越火的异步Web框架Sanic

1. Sanic简介

Sanic 是 Python3.7+ Web 服务器和 Web 框架,旨在提高性能。它允许使用 Python3.5 中添加的async/await语法,这使得您的代码有效的避免阻塞从而达到提升响应速度的目的。

看到这里,可能你会注意到,Sanic的一个显著特性就是高性能,由于支持async/await语法,它的执行速度会非常的快。

在GitHub上面有一个项目专门是给各种语言的web框架进行压测(传送门)。

框架每秒处理请求数(64并发)每秒处理请求数(256并发)每秒处理请求数(512并发)
starlette (0.20)50,90053,04853,094
sanic (22.6)49,14851,76251,300
fastapi (0.81)34,19236,86636,668
falcon (3.1)22,12221,60621,323
flask (2.2)13,94513,83013,661
tornado (6.2)13,65514,49613,924
django (4.1)8,0017,9408,002

可以看出来,Sanic在常用的Python框架中,速度是处在领先地位的。

除了高性能之外,Sanic一个超方便的地方就是可以部署在生产环境,它自带了一个Web服务器,可以使用Run方法直接启动应用。当然除此之外,您还可以使用支持ASGI(Asynchronous Server Gateway Interface)应用的服务器来部署Sanic,或者使用Gunicorn.

在这里还要特别提一下Sanic的社区,Sanic的网站拥有完善的中文用户手册,该网站是由贡献者自主发起且受官方承认,由翻译者进行翻译贡献,由Sanic官方团队进行发布,很适合英文不太好的小伙伴阅读学习。

社区非常欢迎新的贡献者加入,可以在GitHub上面浏览标记好的问题,也可以在论坛上进行提问、讨论、解答。

2. 快速上手

首先,我们需要先安装Sanic框架。

pip install sanic

现在,来写一个Hello World

from sanic import Sanic
from sanic.response import textapp = Sanic("HelloWorld")@app.get("/hello")
async def hello_world(request):return text("Hello, this is my first app in Sancic framework.")

注意,必须使用response或继承自response的类作为相应类型。在许多其他框架中,它们允许您使用诸如return "Hello World"或者return {"foo":"bar"}的方式来进行返回,但是为了执行这类隐式调用,需要在响应流程中的某个位置花费大量的时间来确定您到底想要表达什么意思。因此,我们以轻松调用为代价,来提升服务的响应速度,Sanic会要求您对您的响应进行显式调用

将上面的代码保存为HelloWorld.py,然后用下面命令执行,它会调用内置的Web服务器运行程序。

sanic HelloWorld.app

如果执行命令的时候遇到下面的报错,检查一下是否已经将脚本所在目录(通常为C:\Users%userid%\AppData\Roaming\Python\Python310\Scripts)放在环境变量中。

'sanic' is not recognized as an internal or external command,
operable program or batch file.

命令执行成功会出现下面的提示:

640?wx_fmt=png&tp=wxpic&wxfrom=5&wx_lazy=1&wx_co=1

从提示中可以看出来,sanic模式是运行在生产模式,可以通过加启动参数--debug或者--dev用于开发模式。

现在我们来看看效果:

使用浏览器打开网址http://localhost:8000/hello

640?wx_fmt=png&tp=wxpic&wxfrom=5&wx_lazy=1&wx_co=1

也可以使用其它API测试工具比如Postman来测试:

640?wx_fmt=png&tp=wxpic&wxfrom=5&wx_lazy=1&wx_co=1

服务启动的默认端口是8000,如果想要修改端口,可以使用启动参数或者代码中声明的方式。

启动参数指定端口

sanic HelloWorld.app --host=127.0.0.1 --port=7890

通过代码指定端口

app.run(host='127.0.0.1', port=7890)

run方法支持以下几个关键字参数:

参数名称默认值参数说明
host"127.0.0.1"服务器监听的地址。
port8000服务器监听的端口。
unixNoneUnix套接字文件(不是TCP)。
debugFalse开启DEBUG输出(降低服务器性能)。
sslNoneSSLContext,子进程用于 SSL 加密。
sockNone服务器接受连接的套接字。
workers1要生成的子进程数量。
loopNone一个兼容 asyncio 的事件循环。如果没有指定,Sanic 会创建自己的事件循环。
protocolHttpProtocolasyncio.protocol 子类。
access_logTrue启用请求访问日志(显著降低服务器速度)。

可以使用python HellowWorld.py来运行带有app.run(...)方法的程序。

640?wx_fmt=png&tp=wxpic&wxfrom=5&wx_lazy=1&wx_co=1

3. 实现Get和Post接口

Sanic通过注解来定义接口方法,用一个简单的加减运算作为例子。

from sanic import Sanic
from sanic.response import text, jsonapp = Sanic("HelloWorld")@app.get("/add")
async def addXY(request):parameters = request.argsx = float(parameters['x'][0])y = float(parameters['y'][0])result = str(x + y)return text("The result is: " + result)@app.post("minus")
async def minusXY(request):parameters = request.jsonx = float(parameters['x'])y = float(parameters['y'])result = x - yreturn json({"Result": result})app.run(host='127.0.0.1', port=7890)

使用Postman调用接口

640?wx_fmt=png&tp=wxpic&wxfrom=5&wx_lazy=1&wx_co=1

640?wx_fmt=png&tp=wxpic&wxfrom=5&wx_lazy=1&wx_co=1


以上,相信您已经对Sanic框架有了一个基本的了解,也掌握了快速搭建api接口以及测试的方法。如果大家觉得文章还不错的话,欢迎大家三连(点赞+在看+收藏)。

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

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

相关文章

1.Vue-在独立页面实现Vue的增删改查

题记 在独立页面实现Vue的增删改查&#xff0c;以下是具体的代码&#xff0c;和操作流程。 编写index.html页面 index.html文件如下&#xff1a; <!DOCTYPE html> <html> <head><title>Vue CRUD Example</title><!--在线导入vue文件-->&l…

Linux系统之ip命令的基本使用

Linux系统之ip命令的基本使用 一、ip命令介绍1.1 ip命令简介1.2 ip命令的由来1.3 ip命令的安装包 二、ip命令使用帮助2.1 ip命令的help帮助信息2.2 ip命令使用帮助 三、查看网络信息3.1 显示当前网络接口信息3.2 显示网络设备运行状态3.3 显示详细设备信息3.4 查看路由表3.5 查…

canvas画一个笑脸和画一个三角形

画一个笑脸主要用到的是画弧形的方法&#xff1a;arc&#xff0c;有五个参数&#xff1a;起始坐标&#xff0c;半径&#xff0c;弧形起始坐标&#xff0c;还有一个参数是顺时针还是逆时针。画的笑脸&#xff1a;虽然丑了点&#xff0c;但是学习了 代码&#xff1a; <!DOCTY…

【Docker 内核详解】namespace 资源隔离(四):Mount namespace Network namespace

【Docker 内核详解 - namespace 资源隔离】系列包含&#xff1a; namespace 资源隔离&#xff08;一&#xff09;&#xff1a;进行 namespace API 操作的 4 种方式namespace 资源隔离&#xff08;二&#xff09;&#xff1a;UTS namespace & IPC namespacenamespace 资源隔…

[23] T^3Bench: Benchmarking Current Progress in Text-to-3D Generation

3D生成蓬勃发展&#xff0c;主流方法通过事例比较和用户调查来评价方法好坏&#xff0c;缺少客观比较指标&#xff1b;本文提出Bench&#xff0c;首次综合比较了不同生成方法&#xff1b;具体来说&#xff0c;本文设计了质量评估&#xff08;Quality Assessment&#xff09;和对…

MyBatisPlus的学习项目页面

MyBatisPlus通过扫描实体类&#xff0c;并基于反射获取实体类信息作为数据库表信息 类名驼峰转下划线作为表名 名为id的字段作为主键 变量名驼峰转下划线作为表的字段名 常见注解 TableName&#xff1a;用来指定表名 Tableld&#xff1a;用来指定表中的主键字段信息 Tabl…

攻防世界题目练习——Web引导模式(三)(持续更新)

题目目录 1. mfw2.3.4.5. 1. mfw 进去看到网页和页面内容如下&#xff1a; 看到url的参数 ?pageabout &#xff0c;我以为是文件包含什么的&#xff0c;反复试了几次&#xff0c;想用 …/…/…/…/etc/passwd &#xff0c;但是发现.似乎被过滤了&#xff0c;实在不知道怎么做…

SpringCloud学习笔记-Nacos服务分级存储模型

Nacos服务分级存储模型 一级是服务&#xff0c;例如userservice二级是集群&#xff0c;例如杭州或上海三级是实例&#xff0c;例如杭州机房的某台部署了userservice的服务器 微服务互相访问时&#xff0c;应该尽可能访问同集群实例&#xff0c;因为本地访问速度更快。当本集…

Pygame中将鼠标形状设置为图片2-1

在Pygame中利用Sprite类的派生类将鼠标形状设置为图片&#xff0c;其原理就是将Sprite类的派生类对应图片的位置设置为鼠标的当前位置即可。其效果如图1所示。 图1 将鼠标设置为图片 从图1可以看出&#xff0c;鼠标的形状变为红色的&#xff0c;该红色的随着鼠标的移动而移动&…

前后端数据导入导出Excel

一&#xff1a;导入 Excel有读取也便有写出&#xff0c;Hutool针对将数据写出到Excel做了封装。 原理 Hutool将Excel写出封装为ExcelWriter&#xff0c;原理为包装了Workbook对象&#xff0c;每次调用merge&#xff08;合并单元格&#xff09;或者write&#xff08;写出数据&…

激发创意,打造震撼视觉效果——Adobe After Effects 2024(Ae2024)全新来袭!

想要创造独特的、令人惊叹的视觉效果吗&#xff1f;不要犹豫&#xff0c;现在就升级到全新的Adobe After Effects 2024&#xff08;Ae2024&#xff09;&#xff01;作为业界领先的动态图形和视觉效果软件&#xff0c;Ae2024将为您的创作带来前所未有的火花。 Ae2024拥有强大的…

GPT实战系列-ChatGLM2部署Ubuntu+Cuda11+显存24G实战方案

GPT实战系列-ChatGLM2部署UbuntuCuda11显存24G实战方案 自从chatGPT掀起的AI大模型热潮以来&#xff0c;国内大模型研究和开源活动&#xff0c;进展也如火如荼。模型越来越大&#xff0c;如何在小显存部署和使用大模型&#xff1f; 本实战专栏将评估一系列的开源模型&#xf…

处理ElementUI组件默认样式多次重复问题

问题截图&#xff1a; 解决办法&#xff1a; 在postcss.config.js文件里添加配置项&#xff1a; module.exports {plugins: {autoprefixer: {},cssnano: {} //添加这行代码}, } 处理结果&#xff1a; github issues&#xff1a; https://github.com/ElemeFE/element/is…

【LeetCode高频SQL50题-基础版】打卡第6天:第31~35题

文章目录 【LeetCode高频SQL50题-基础版】打卡第6天&#xff1a;第31~35题⛅前言员工的直属部门&#x1f512;题目&#x1f511;题解 判断三角形&#x1f512;题目&#x1f511;题解 连续出现的数字&#x1f512;题目&#x1f511;题解 指定日期的产品价格&#x1f512;题目&am…

让ChatGPT等模型学会自主思考!开创性技术“自主认知”框架

ChatGPT、百度文心一言、Bard等大语言模型展现出了超强的创造能力&#xff0c;加速了生成式AI的应用进程。但AI模型只能基于训练数据执行各种任务&#xff0c;无法像人类一样利用生活知识、过往经验用于复杂的推理和决策。 例如&#xff0c;在玩游戏时&#xff0c;人类可以利用…

01Maven的工作机制: Maven作为依赖管理工具以及Maven作为构建管理工具

Maven的特点及其应用 Maven是Apache软件基金会组织维护的一款专门为Java项目提供构建和依赖管理支持的工具 Maven作为依赖管理工具 管理jar包的规模: 随着我们使用的框架数量越来越多以及框架的封装程度也越来越高&#xff0c;项目中使用的jar包也就越来越多 Maven工程中依…

Qt QMovie和QLabel配合播放GIF表情包

文章目录 效果演示main函数创建MoviePlayer对象头文件movieplayer.h源文件movieplayer.cpp代码解释在Qt框架中,QMovie是用于处理动画和视频的类。所有源码已在本篇文章公布。 效果演示 main函数创建MoviePlayer对象 #include <QApplication>#include "movie

至强服务器BIOS/UEFI驱动开发笔记

至强服务器BIOS/UEFI驱动开发笔记 驱动开发基础Hello UEFI Driver 项目选择项目位置初始化驱动代码文件结构驱动程序入口和基本功能导入AMI工程AMI平台Hello UEFI Driver 编译问题测试结果打印设备列表继续开发`HelloWorldSupported`函数依赖配置使用脚本编译编译测试此DXE驱动…

RCNN系列网络的理解

R-CNN 作者 &#xff1a; Ross Girshick FAST R-CNN 作者 &#xff1a; Ross Girshick FASTER R-CNN 作者 &#xff1a; Jian Sun MASK R-CNN 作者 &#xff1a;kaiming he 一…

kong 和konga网关部署及使用

Kong是一款基于OpenResty&#xff08;Nginx Lua模块&#xff09;编写的高可用、易扩展的&#xff0c;由Mashape公司开源的API Gateway项目。Kong是基于NGINX和Apache Cassandra或PostgreSQL构建的&#xff0c;能提供易于使用的RESTful API来操作和配置API管理系统&#xff0c;…