美文网首页@IT·互联网
关于python ASGI 服务器,你知道多少?

关于python ASGI 服务器,你知道多少?

作者: shengjk1 | 来源:发表于2024-03-03 18:31 被阅读0次

背景

使用过 FastAPI 的同学,肯定熟悉这条命令

uvicorn main:app --reload

unicorn 就是 ASGI 服务器。那么 ASGI 服务器是什么?为什么 FastAPI 要结合 ASGI 服务器使用呢?

ASGI

ASGI 是什么?

ASGI 全称 Asynchronous Server Gateway Interface。它定义了一套标准接口规范,用于连接 Web 服务器和应用程序框架,实现异步处理请求和响应。ASGI 的目标是提供高性能、可伸缩和灵活的 Web 应用程序开发体验。

为什么需要 ASGI?

传统的 Python Web 服务器(如 WSGI)在处理请求时通常采用同步的方式,即每个请求都会阻塞服务器线程,导致服务器无法同时处理大量并发请求。而 ASGI 规范引入了异步编程模型,使得服务器能够以非阻塞的方式处理请求,实现更好的并发性能和扩展性。

ASGI 还允许使用异步的应用程序框架,例如使用异步函数 async、协程或异步 IO asyncio 操作来处理请求。这种异步编程模型可以提供更高的性能,并允许处理复杂的并发操作,如长轮询、WebSocket 等。

另外,ASGI 还支持中间件和插件机制,使得开发者可以方便地扩展和定制服务器和应用程序的功能。

如何使用 ASGI?

要使用 ASGI,你需要选择一个符合 ASGI 规范的服务器和一个符合 ASGI 规范的应用程序框架。

  • 服务器:常见的 ASGI 服务器包括 Uvicorn、Daphne、Hypercorn 等。你可以使用 pip 安装它们,并按照各自的文档进行配置和启动。

  • 应用程序框架:常见的 ASGI 应用程序框架包括 FastAPI、Starlette、Django、Tornado 等。这些框架都符合 ASGI 规范,并提供了异步处理请求和响应的功能。你可以选择其中一个框架,根据文档编写应用程序逻辑,并将其与 ASGI 服务器进行绑定。

在配置和启动 ASGI 服务器时,你需要指定应用程序的入口点,即 ASGI 应用程序对象。服务器将会监听指定的地址和端口,并开始接收来自客户端的请求,将其传递给应用程序进行处理。

FastAPI + ASGI

FastAPI 基于 Python 3.8+ 的异步编程模型,使用了异步函数和协程来处理请求和响应。这使得 FastAPI 能够处理大量并发请求,并实现出色的性能表现。

因此 FastAPI 结合 ASGI 可以充分发挥异步编程的优势,提供高性能和异步处理能力,使得开发者能够构建出高效、可伸缩的 Web API。
所以整个请求和响应的流程如下:

整个请求流程:

客户端 --> ASGI服务器-Uvicorn --> FastAPI框架

整个响应的流程

FastAPI框架 --> ASGI服务器-Uvicorn --> 客户端

代码样例

pip install fastapi
pip install "uvicorn[standard]"

Create a file main.py with:

from typing import Union

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
def read_root():
    return {"Hello": "World"}


@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
    return {"item_id": item_id, "q": q}

启动

uvicorn main:app --reload

总结

ASGI 可以实现异步处理请求和响应,结合FastAPI 可以充分发挥异步编程的优势,使得开发者能够构建出高效、可伸缩的 Web API。

相关文章

  • Python 异步 ASGI 服务器及框架

    ASGI 在 Python3.5 之后增加 async/await 特性之后,异步编程变得异常火爆,越来越多开发者...

  • WSGI&ASGI

    此文档用于解读理解WSGI和ASGI两个概念,目标解决一下几个问题: 什么是WSGI 什么是ASGI WSGI和A...

  • 关于Block 你知道多少?

    前言 本文只是作为自己对学习的一个总结,如果有错误的地方欢迎各位大神提出 文笔不行,可能会写的有点乱,请见谅! 先...

  • 关于桂皮你知道多少?

    学做早餐以后认识了很多种香料,桂皮是其中一种。很多菜谱里要用到肉桂粉,一直以为就是我们做卤菜里放的桂皮磨成的粉,其...

  • 关于情绪,你知道多少?

  • 关于“情”,你知道多少

    “情”——与生俱来之物,看不见,摸不着,却能够感知。 小时候,我们从嘎嘎坠地,哭声四起时就离不开亲情;成长懂事后,...

  • 关于保险,你知道多少

    对于保险,相信很多人的定位肯定还停留在以前走在大街上,莫名其妙的有人找你搭讪,或者朝你微笑,不用想不是做保险的就是...

  • 关于健身,你知道多少?

    首先声明,我不是健身爱好者,仅仅因为减肥才办了健身卡,呆在健身房半年多了,体重和体型目前还没达到满意的状态,但我仍...

  • 关于疼痛,你知道多少?

    前言: 我们所感受到的痛,并不是刺激本身,而是我们大脑里神经网络处理的结果,是大脑中的现实,并不是外界的现实。 得...

  • 关于中医,你知道多少?

    中医(Traditional Chinese Medicine),一般指以中国汉族劳动人民创造的传统医学为主的医学...

网友评论

    本文标题:关于python ASGI 服务器,你知道多少?

    本文链接:https://www.haomeiwen.com/subject/jozkzdtx.html