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.mzph.cn/news/107511.shtml

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

相关文章

深度学习小工具:Linux 环境下的用户命令和脚本顺序执行器

前言 深度学习跑代码的时候,需要跑很多个对比实验,要么开多个窗口并行执行代码,要么就写在一个 .sh 文件里面顺序执行,前面一种并行执行多个任务出结果很慢,而后一种如果想添加任务或者删除某个任务就得全部停止&…

[牛客习题]“幸运的袋子”

习题链接:幸运的袋子_牛客题霸_牛客网 题目分析 由题意可知:“幸运的袋子”的概念是——小球的数值之和大于小球的数值之积。 假如现在有5个小球:1,1,3,5,7,并将他们编号a0~a4.我们…

【05】基础知识:React组件实例三大核心属性 - props

一、props 了解 理解 1、每个组件对象都会有 props(properties的简写)属性 2、组件标签的所有属性都保存在 props 中 作用 通过标签属性从组件外向组件内传递变化的数据 注意 组件内部不要修改 props 数据 二、案例 需求:自定义用来…

算法通关村第一关|青铜|链表笔记

1.理解 Java 如何构造出链表 在 Java 中,我们创建一个链表类,类中应当有两个属性,一个是结点的值 val ,一个是该结点指向的下一个结点 next 。 next 通俗讲是一个链表中的指针,但是在链表类中是一个链表类型的引用变量…

【数据结构】链表

⭐ 作者:小胡_不糊涂 🌱 作者主页:小胡_不糊涂的个人主页 📀 收录专栏:浅谈数据结构 💖 持续更文,关注博主少走弯路,谢谢大家支持 💖 链表 1. ArrayList的缺陷2. 链表2.1…

异步使用langchain

文章目录 一.先利用langchain官方文档的AI功能问问二.langchain async api三.串行,异步速度比较 一.先利用langchain官方文档的AI功能问问 然后看他给的 Verified Sources 这个页面里面虽然有些函数是异步函数,但是并非专门讲解异步的 二.langchain asy…

大模型引发“暴力计算”,巨头加速推进液冷“降温”

点击关注 文|姚悦 编|王一粟 一进入部署了液冷服务器的数据中心,不仅没有嘈杂的风扇声,甚至在不开空调的夏日也完全没有闷热感。 在大模型引发“暴力计算”的热潮下,数据中心的上下游,正在加紧推进液冷“…

【跳槽必备】2023常用手写面试题知识点总结

前言 想想几年前一个月随便投出去一天至少3面试一个月排满面试的场景对于现在已经灭绝了,基本只有外包和驻场有回应,今年很多人都只能猥琐发育,市场上不仅岗位变少,money也少了很多。目前环境的不景气,面试难度也增加…

特种设备怎么运输到国外

特种设备的运输需要考虑多个因素,包括设备的尺寸、重量、敏感度等。以下是一些常用的运输方式: 海运:海运是运输特种设备的主要方式之一,通常采用货运集装箱进行装载。在运输前需要进行妥善包装和固定,以保证设备的安全…

二十六、【颜色调整】

文章目录 1、色相/饱和度2、色彩平衡3、曲线4、可选颜色 1、色相/饱和度 色相其实就是颜色的亮度,就是我们往颜色里边加白色,白色越多颜色越淡。饱和度就是我们往颜色里边加黑色,黑色越多颜色越浓。如下图,我们调整拾色器里边的颜…

2.1 初探大数据

文章目录 零、学习目标一、导入新课二、新课讲解(一)什么是大数据(二)大数据的特征1、Volume - 数据量大2、Variety - 数据多样3、Velocity - 数据增速快4、Value - 数据价值低5、Veracity - 数据真实性 (三&#xff0…

互联网摸鱼日报(2023-10-11)

互联网摸鱼日报(2023-10-11) 36氪新闻 走向平衡:生成式AI的开源与专有模型之争 麦当劳和可乐们最大的威胁,居然是“减肥药” 束从轩5000万“宴请全国”,老乡鸡会去港股吗? 威马汽车回应破产重整 特斯拉电动皮卡,还…

RabbitMQ消息中间件概述

1.什么是RabbitMQ RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现。AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有很多公开标准(如 COBAR的 IIOP ,或者是 SOAP 等&…

当出现“无法成功完成操作,因为文件包含病毒或潜在的垃圾软件“时的解决办法

安装补丁或其他安装包时,被系统识别为病毒垃圾 具体解决步骤是: 1.在开始菜单,打开Windows 安全中心 找到主页的病毒和威胁防护 找到管理设置 最后将确认安全的文件或安装包添加到排除项即可

LetCode刷题[简单题](4)顺序链表的顺序合并

在平常的应用场景中很多时候需要将繁杂的信息进行融合,比如零散的时间戳信息进行合并,顺序链表的合并就完美的解决这种问题的痛点。相对于原本的直接合并然后再进行排序,数据结构的复杂度不一样,因此就有类似此题的北京。融合有序…

安装nginx,配置https,并解决403问题

nginx安装 下载nginx:下载地址 上传到/opt目录 解压nginx,并进入解压后到目录 cd /opt tar -zxvf nginx-1.25.2.tar.gz cd nginx-1.25.2编译(with-http_ssl_module为https模块) ./configure --with-http_ssl_module安装 make install默认的安装目录为…

华为eNSP配置专题-VLAN和DHCP的配置

文章目录 华为eNSP配置专题-VLAN和DHCP的配置1、前置环境1.1、宿主机1.2、eNSP模拟器 2、基本环境搭建2.1、基本终端构成和连接 3、VLAN的配置3.1、两台PC先配置静态IP3.2、交换机上配置VLAN 4、接口方式的DHCP的配置4.1、在交换机上开启DHCP4.2、在PC上开启DHCP 5、全局方式的…

【docker】ubuntu下安装

ubuntu下安装docker 卸载原生docker更新软件包安装依赖Docker官方GPG密钥添加软件来源仓库安装docker添加用户组运行docker安装工具重启dockerhelloworld 卸载原生docker $ apt-get remove docker docker-engine docker.io containerd runc更新软件包 apt-get update apt-get…

零售数据分析模板鉴赏-品类销售结构报表

不管是服装零售,还是连锁超市或者其他,只要是零售行业就绕不过商品数据分析,那么商品数据分析该怎么做?奥威BI的零售数据分析方案早早就预设好相关报表模板,点击应用后,一键替换数据源,立得新报…

新版Android Studio搜索不到Lombok以及无法安装Lombok插件的问题

前言 在最近新版本的Android Studio中,使用插件时,在插件市场无法找到Lombox Plugin,具体表现如下图所示: 1、操作步骤: (1)打开Android Studio->Settings->Plugins,搜索Lom…