温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

python异步的ASGI与Fast Api如何实现

发布时间:2022-03-29 17:00:25 来源:亿速云 阅读:248 作者:iii 栏目:移动开发

这篇文章主要讲解了“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 Quart
app = 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 fastapi
pip install uvicorn
import uvicorn
from 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 running
if __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、强大的依赖注入系统

感谢各位的阅读,以上就是“python异步的ASGI与Fast Api如何实现”的内容了,经过本文的学习后,相信大家对python异步的ASGI与Fast Api如何实现这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI