我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python异步的ASGI与Fast Api的实现方法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python异步的ASGI与Fast Api的实现方法

这篇文章主要介绍“python异步的ASGI与Fast Api的实现方法”,在日常操作中,相信很多人在python异步的ASGI与Fast Api的实现方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python异步的ASGI与Fast Api的实现方法”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

目录

Asgi是异步通信服务规范。客户端发起服务呼叫,但不等待结果。调用方立即继续其工作,并不关心结果。如果调用方对结果感兴趣,有一些机制可以让其随时被回调方法返回结果。

ASGI尝试保持在一个简单的应用接口的前提下,提供允许数据能够在任意的时候、被任意应用进程发送和接受的抽象。并且同样描述了一个新的,兼容HTTP请求响应以及WebSocket数据帧的序列格式。允许这些协议能通过网络或本地socket进行传输,以及让不同的协议被分配到不同的进程中。

#Asgi example   async def application(scope, receive, send):    event = await receive()        ...       await send({"type": "websocket.send", ...})

ASGI框架

您可以使用 Uvicorn,Daphne 或 Hypercorn 运行任何 ASGI 框架

对于小型服务,您也可以直接编写 ASGI 应用程序。例如之前编写的异步框架。

Python 中有以下几个支持 ASGI 的异步框架

Starlette
Starlette 是一个轻量级的 ASGI 框架/工具包。它是构建高性能异步服务的理想选择,并且支持 HTTP 和 WebSockets。

Django Channels
ASGI 规范最初是设计就是用于 Django Channels 的。
Channels 与其他ASGI框架略有不同,它在线程框架后端上提供了异步前端。
同时 Django Channels 支持 WebSocket,后台任务和长期运行的连接,而应用程序代码仍在标准线程上下文中运行

Quart
Quart 是一个类似于 Flask 的 ASGI Web 框架。Quart 不仅与 Flask 相似,而且与 Flask API 兼容!
该框架的作者希望保留了Flask 的风格,只是向其中添加异步、WebSocket 和 HTTP 2支持。
因此,你可以从 Flask 文档中学习 Quart 的用法,只需要记住 Quart 中的函数是异步的就行。

一个简单的 Quart 服务:

from quart import Quartapp = Quart(name)@app.route('/')async def hello():return 'hello'app.run()

和 Flask 是不是很像,只是多了一个异步 async
由于 Quart 是从 Flask 中演进过来的,因此 Flask 的所有功能均可用:路由,中间件,会话,模板,蓝图等

ASGI服务器

Uvicorn 是一个快速的 ASGI 服务器,Uvicorn 是基于 uvloop 和 httptools 构建的,是 Python 异步生态中重要的一员。
Uvicorn 当前支持 HTTP / 1.1 和 WebSockets,将来计划支持HTTP / 2。
版本要求 Python 3.5 以上,Uvicorn 的安装,

pip install uvicorn

示例如下:

async def app(scope, receive, send):    assert scope['type'] == 'http'    await send({        'type': 'http.response.start',        'status': 200,        'headers': [            [b'content-type', b'text/plain'],        ]    })    await send({        'type': 'http.response.body',        'body': b'Hello, world!',    })

运行命令如下,

uvicorn demo:app
服务启动之后,我们通过浏览器就能方位该服务,默认端口 8000

Daphne
Daphne 服务器是最早为 Django Channels 提供支持的 ASGI 服务器
Daphne 它在生产中广泛运行,并支持HTTP / 1.1,HTTP / 2和 WebSockets。

安装和运行的命令如下:

pip install daphne  daphne app:App和 uvicorn 命令类似,app 是文件名称,APP 是应用程序

Hypercorn
Hypercorn 最初是框架 Quart 的一部分,然后被分离为独立的 ASGI 服务器
同样的,Hypercorn 支持 HTTP/1.1, HTTP/2, 以及 WebSockets.
安装和运行的命令如下:
pip install hypercorn hypercorn app:App

FastAPI

FastAPI 是一个基于 Starlette 和 Pydantic 的 API 框架,其灵感来自以前的 APISta 服务器版本
使用 Python 3.6+ 类型声明编写 API 函数参数,并获得自动数据转换,数据验证。
FastApi 最主要的特点是快,非常高的性能,向 NodeJS 和 Go 看齐,现有最快的Python框架之一
同时它可以自动生成交互式 API 文档 UI,编写 API 接口后,你就可以使用符合标准的 UI 如 SwaggerUI,ReDoc 等来使用 API。

其特点如下:

  • 快速:拥有非常高的性能,归功于 Starlette 和 Pydantic;Starlette 用于路由匹配,Pydantic 用于数据验证

  • 开发效率:功能开发效率提升 200% 到 300%

  • 减少 bug:减少 40% 的因为开发者粗心导致的错误

  • 智能:内部的类型注解非常完善,编辑器可处处自动补全

  • 简单:框架易于使用,文档易于阅读

  • 简短:使代码重复最小化,通过不同的参数声明实现丰富的功能

  • 健壮:可以编写出线上使用的代码,并且会自动生成交互式文档

  • 标准化:兼容 API 相关开放标准

  • 它使用了 Python 的类型注解

示例如下:

先安装依赖的库

pip install fastapipip install uvicorn
import uvicornfrom fastapi import FastAPI# 类似于 app = Flask(__name__)app = FastAPI()# 绑定路由和视图函数@app.get("/")async def root():    return {"message": "Hi juejin"}# 在 Windows 中必须加上 if __name__ == "__main__",否则会抛出 RuntimeError: This event loop is already runningif __name__ == '__main__':    # 启动服务,因为我们这个文件叫做 main.py,所以需要启动 main.py 里面的 app    # 第一个参数 "main:app" 就表示这个含义,然后是 host 和 port 表示监听的 ip 和端口    uvicorn.run(app='main:app', host="127.0.0.1", port=8000, reload=True, debug=True)

FastAPI 的几大功能:类型检查、自动 swagger UI、支持 asyncio、强大的依赖注入系统

总结

性能提升注: 以下针对生产环境的大型项目而言fastapi利用异步和轻量级的特点,大大提升了性能。但异步应用到实际中,并不是一件容易的事。fastapi的异步不算难写,逻辑不复杂的话,闭着眼睛加几个await很简单。但如果涉及到复杂系统。一处异步,处处异步。到底要不要用可能就见仁见智了。轻量级同时也代表着和flask一样,很多东西需要自己diy。而不是像django一样一站式解决。所以fastapi可能逐渐接过flask的位置,但还是难以对django发起挑战。最重要的一点还是,选了python作为后端。可能打一开始就不是对性能有多敏感。而是看中python的开发效率和生态。如果从兼顾开发效率+性能的角度出发,那么fastapi极大程度上会遇到来自go的强力竞争。只有再兼顾上python现有生态,fastapi才会有很大的优势。我们可以假想一个现有python项目,遇到了性能瓶颈,但不想脱离python的环境,或者不想承受更换语言的成本。那么fastapi是个很好的未来。

API文档、类型检测以及依赖注入fastapi完全拥抱了typing类型系统,高度整合了openapi(swagger ui),正如他的名字一样fastapi,从api开发的角度来说,无论是性能还是开发效率,它都足够“fast”。为api文档提供了非常多的支持。无需任何配置,后端只要把endpoint写出来,一份详尽的api文档就会自动生成。对于小型项目来说绝对是巨大优势。类型检测和依赖注入是api文档的基石 ,它们重点在于围绕框架的“感知力”。inspect抓endpoint的参数,明确的知道每个api接口需要什么,返回什么。这会让你感觉这个框架真的很有灵性。对于这方面我个人绝对是赞不绝口的。

简单与简洁会用flask就会fastapi,fastapi的学习曲线十分平滑。从下至上有很多值得学习参透的。非常建议有空的同学过一遍starlette,uvicorn,fastapi的源码。加起来也没有django多。

相关生态和社区还未成熟python的异步发展略为缓慢,仅仅fastapi还不能撑起一片天。例如现在还没有完全可靠的异步orm。不少东西还需要自己造轮子。在小项目上,这可能影响不是很大。直接写代码可能比配置插件来的快。但将很大程度上影响它被采用到线上生产环境。总结你可以将fastapi看成新出炉的flask plus。如果你有采用flask的理由,那么你同样有将来采用fastapi的理由。

到此,关于“python异步的ASGI与Fast Api的实现方法”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python异步的ASGI与Fast Api的实现方法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python异步的ASGI与Fast Api的实现方法

这篇文章主要介绍“python异步的ASGI与Fast Api的实现方法”,在日常操作中,相信很多人在python异步的ASGI与Fast Api的实现方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”pyt
2023-06-20

python异步的ASGI与Fast Api实现

目录ASGI框架ASGI服务器FastAPI总结Asgi是异步通信服务规范。客户端发起服务呼叫,但不等待结果。调用方立即继续其工作,并不关心结果。如果调用方对结果感兴趣,有一些机制可以让其随时被回调方法返回结果。ASGI尝试保持在一个简单的
2022-06-02

javascript实现异步的方法

这篇文章给大家分享的是有关javascript实现异步的方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。javascript实现异步的方法:1、使用setTimeout方法;2、使用setImmediate 方
2023-06-14

JS异步遍历的实现方法

本文主要介绍了JS异步遍历的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-05-17

Golang中异步编程的实现方法

Golang中异步编程的实现方法在Golang中,异步编程是通过goroutine和channel实现的。goroutine是轻量级的线程,可以并发执行任务。而channel是goroutine之间通信的管道,可以实现数据传递和同步操作。
Golang中异步编程的实现方法
2024-02-29

Ajax+js实现异步交互的方法

小编给大家分享一下Ajax+js实现异步交互的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!JS是什么JS是JavaScript的简称,它是一种直译式的脚本语
2023-06-08

java实现异步的方法有哪些

Java实现异步的方法有以下几种:1. 使用线程池:可以通过ExecutorService接口创建线程池,然后使用submit()或execute()方法提交任务进行异步执行。2. 使用CompletableFuture:Completab
2023-08-09

Node中的异步实现与事件驱动方法是什么

这篇“Node中的异步实现与事件驱动方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Node中的异步实现与事件驱动方
2023-07-04

使用Java实现异步编程的方法

本篇文章给大家分享的是有关使用Java实现异步编程的方法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。什么是异步?为什么要用它?异步编程提供了一个非阻塞的,事件驱动的编程模型。
2023-05-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录