当前位置: 首页 > news >正文

Python的ASGI Web 服务器之uvicorn

文章目录

    • 什么是uvicorn
    • Uvicorn 和 uWSGI 对比区别
    • 安装 Uvicorn
    • 使用示例

什么是uvicorn

官网https://www.uvicorn.org/

Uvicorn 是一个用于 Python 的 ASGI Web 服务器实现。

Until recently Python has lacked a minimal low-level server/application interface for async frameworks. The ASGI specification fills this gap, and means we’re now able to start building a common set of tooling usable across all async frameworks.
直到最近,Python 还缺少一个用于异步框架的最小底层服务器/应用程序接口。ASGI 规范 填补了这一空白,这意味着我们现在能够开始构建一组可在所有异步框架中使用的通用工具。

Uvicorn currently supports HTTP/1.1 and WebSockets.
Uvicorn 目前支持 HTTP/1.1 和 WebSockets。

Uvicorn 只有少量的核心依賴,這使它比其他Web 伺服器(如uWSGI)更輕量。 Uvicorn 也能輕鬆與Docker、Kubernetes 等容器技術整合,這對於需要快速部署的開發團隊來說,是一個很大的優勢。

Uvicorn 是由 Starlette 框架的作者编写的 ASGI 服务器,旨在提供高性能的异步请求处理能力。它使用 asyncio 库实现异步 I/O 操作,支持 HTTP 和 WebSocket 协议,可与各种 ASGI 应用程序框架(如 FastAPI、Django、Starlette 等)配合使用。

Uvicorn 和 uWSGI 对比区别

在这里插入图片描述

  • 如果您的应用是以异步方式构建(如使用 FastAPI),并且您需要快速开发和测试,可以选择 Uvicorn。
  • 如果您在生产环境中使用传统的 WSGI 应用程序,并且希望利用多进程管理和其他高级特性,可以选择 uWSGI,尤其是在需要与 Nginx 等 Web 服务器集成时。

安装 Uvicorn

pip install uvicorn

使用示例

下面是一个简单的示例,演示了如何使用 Uvicorn 启动一个异步 Web 服务:

# main.py

from fastapi import FastAPI

app = FastAPI()

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

保存以上代码到 main.py 文件中。然后,在命令行中执行以下命令:

uvicorn main:app --reload

这将启动一个名为 main 的 ASGI 应用程序,使用 Uvicorn 服务器运行在本地主机的默认端口 8000 上,并监听根路径 / 的 GET 请求。在浏览器中访问 http://localhost:8000,将看到 “Hello, World!” 的消息。

http://www.dtcms.com/a/99482.html

相关文章:

  • 图解AUTOSAR_SWS_SynchronizedTimeBaseManager
  • Vue——常用指令总结、指令修饰符、v-model原理、computed计算属性、watch监听器、ref和$refs
  • JAVA反序列化深入学习(八):CommonsCollections6
  • python 上下文管理器with
  • CKS认证 | Day3 K8s容器运行环境安全加固
  • 实战篇Redis
  • 动力电池热失控:新能源汽车安全的“隐形火山”如何预防?
  • 蓝桥杯 之 二分
  • 8、linux c 信号机制
  • sass报错,忽略 Sass 弃用警告,降级版本
  • 笔记本裸机安装centos,找不到wifi设备问题
  • 英语学习笔记1
  • 命悬生死线:当游戏遭遇DDoS围剿,如何用AI破局?
  • 【Linux网络与网络编程】01.初识网络
  • 【设计模式】状态模式
  • Redis 分布式锁实现深度解析
  • RHCA核心课程技术解析5:红帽高可用性集群架构与深度实践
  • 基于Huggingface的lerobot项目在so-arm100机械臂上的复现笔记
  • 创建SpringBoot项目报错
  • Java创建对象有几种方式?
  • 吴恩达深度学习复盘(1)神经网络与深度学习的发展
  • 什么是UI自动化测试?什么项目适合做UI自动化测试?
  • 编程考古-Borland JBuilder:一场关于Java灵魂的战争与救赎
  • Android 设计模式之适配器模式
  • 智能路由系统-信息泄露漏洞挖掘
  • 简单使用LlamaIndex实现RAG
  • (四)GTM_TOM模块定时器中断应用
  • 基于Python深度学习的鲨鱼识别分类系统
  • 垃圾回收机制的几种实现机制简介
  • 【差分】详解一维前缀和和差分问题