【Python系列】异步 Web 服务器

news/2024/12/14 6:11:03/

???欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
img

  • 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老
  • 导航
    • 檀越剑指大厂系列:全面总结 java 核心技术,jvm,并发编程 redis,kafka,Spring,微服务等
    • 常用开发工具系列:常用的开发工具,IDEA,Mac,Alfred,Git,typora 等
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 新空间代码工作室:提供各种软件服务,承接各种毕业设计,毕业论文等
    • 懒人运维系列:总结好用的命令,解放双手不香吗能用一个命令完成绝不用两个操作
    • 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。??? 欢迎订阅本专栏

博客目录
    • Uvicorn 的起源与特点
    • Uvicorn 的安装与配置
    • 启动 Uvicorn 服务器
      • 理解`uvicorn.run`函数
      • 示例:启动服务器
    • Uvicorn 的高级特性

在现代 Web 开发中,异步编程已经成为提高性能和可伸缩性的关键技术。Uvicorn 是一个轻量级的 ASGI(Asynchronous Server Gateway Interface)服务器,用于托管 Python 异步 Web 应用程序。它基于 Starlette 和 FastAPI 框架,提供了一个快速、高效的方式来运行异步代码。

Uvicorn 的起源与特点

Uvicorn 是由 Tom Christie 创建的,他也是 Starlette 和 FastAPI 框架的作者。Uvicorn 的名字来源于“unicorn”(独角兽),象征着其在异步 Web 服务器领域的特殊地位。Uvicorn 的主要特点包括:

  1. 轻量级:Uvicorn 是一个轻量级的 ASGI 服务器,不需要额外的依赖,可以快速启动和运行。
  2. 高性能:由于其异步特性,Uvicorn 能够处理大量的并发连接,而不会阻塞线程。
  3. 兼容性:Uvicorn 兼容 ASGI 标准,可以与任何遵循 ASGI 的 Python 异步框架一起工作,如 Starlette、FastAPI 等。
  4. 跨平台:Uvicorn 可以在多种操作系统上运行,包括 Linux、macOS 和 Windows。
    在这里插入图片描述

Uvicorn 的安装与配置

要使用 Uvicorn,首先需要安装它。可以通过 pip 轻松安装:

pip install uvicorn

安装完成后,你需要一个 ASGI 应用程序。这里以 FastAPI 为例,因为它是 Uvicorn 的常用搭档。FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 APIs,使用 Python 3.6+基于标准 Python 类型提示。

创建一个简单的 FastAPI 应用程序:

from fastapi import FastAPIapp = FastAPI()@app.get("/")
async def read_root():return {"Hello": "World"}

启动 Uvicorn 服务器

一旦你有了 ASGI 应用程序,就可以使用 Uvicorn 来运行它。在 FastAPI 应用程序的同一目录下,打开终端并运行以下命令:

uvicorn main:app --reload

这里的main是包含 FastAPI 应用的 Python 文件的名称(不包括.py扩展名),app是 FastAPI 实例的名称。--reload参数用于在代码更改时自动重新加载服务器,这对于开发非常有用。

理解uvicorn.run函数

uvicorn.run函数是 Uvicorn 提供的另一种启动服务器的方式,它允许你以编程方式启动服务器。这在你想要在代码中控制服务器的启动和关闭时非常有用。函数的基本语法如下:

uvicorn.run(app, host, port)
  • app:你的 ASGI 应用程序实例。
  • host服务器监听的主机地址。"0.0.0.0"表示监听所有可用的网络接口。
  • port服务器监听的端口号。
示例:启动服务器

假设你有一个名为app的 FastAPI 应用程序实例,你可以使用以下代码启动服务器

import uvicornuvicorn.run(app=app, host="0.0.0.0", port=8080)

这行代码告诉 Uvicorn 在所有网络接口的 8080 端口上启动app应用程序。这样,任何能够访问该服务器的客户端都可以通过http://<服务器IP>:8080来访问你的 Web 应用程序。

Uvicorn 的高级特性

Uvicorn 不仅仅是一个简单的服务器,它还提供了许多高级特性,如:

  1. 日志记录:Uvicorn 提供了详细的日志记录功能,可以帮助你监控应用程序的状态和性能。
  2. 生命周期控制:Uvicorn 允许你在应用程序启动和关闭时执行自定义代码。
  3. 中间件支持:Uvicorn 支持中间件,可以让你在请求处理流程中添加自定义逻辑。

觉得有用的话点个赞 ???? 呗。
本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!???

???如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!?? ?? ??

???Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!???

img


http://www.ppmy.cn/news/1554943.html

相关文章

Jenkins参数化构建详解(This project is parameterized)

本文详细介绍了Jenkins中不同类型的参数化构建方法&#xff0c;包括字符串、选项、多行文本、布尔值和git分支参数的配置&#xff0c;以及如何使用ActiveChoiceParameter实现动态获取参数选项。通过示例展示了传统方法和声明式pipeline的语法 文章目录 1. Jenkins的参数化构建1…

基于IEEE 802.1Qci的时间敏感网络(TSN)主干架构安全分析及异常检测系统设计

中文标题&#xff1a;基于IEEE 802.1Qci的时间敏感网络&#xff08;TSN&#xff09;主干架构安全分析及异常检测系统设计 英文标题&#xff1a;Security Analysis of the TSN Backbone Architecture and Anomaly Detection System Design Based on IEEE 802.1Qci 作者信息&…

在CentOS中安装和卸载mysql

在CentOS7中安装和卸载mysql 卸载mysql1、查看是否安装过mysql2、查看mysql服务状态3、关闭mysql服务4、卸载mysql相关的rpm程序5、删除mysql相关的文件6、删除mysql的配置文件my.cnf 安装mysql1、下载mysql相关的rpm程序2、检查/tmp临时目录权限3、安装mysql前的依赖检查3、安…

如何在 Docker 中查看日志?

在 Docker 中查看容器的日志是一个常见的任务&#xff0c;可以帮助你调试应用程序、监控其运行状况以及解决可能出现的问题。Docker 提供了 docker logs 命令来方便地访问容器的标准输出和标准错误流。以下是使用 docker logs 的一些基本方法和其他获取日志信息的方式&#xff…

初识Linux · 网络基础

目录 前言&#xff1a; 初识协议 再识协议 局域网 跨网络传输 前言&#xff1a; 本文作为Linux网络学习的第一篇文章&#xff0c;相对来说概念还是偏多的&#xff0c;甚至于概念让人觉得晦涩&#xff0c;这是非常正常的&#xff0c;那么进入网络部分之前&#xff0c;我们…

Leetcode 每日一题9.回文数

&#x1f308;&#x1f308;&#x1f308;今天给大家分享的是:回文数的解法 目录 ​编辑 问题描述 输入输出格式 示例 约束条件 进阶挑战 解决方案 问题分析 过题图片 字符串转换法 数学方法 算法解释 题目链接 结论 问题描述 给定一个整数 x&#xff0c;我们需要…

Nacos 3.0 Alpha 发布,在安全、泛用、云原生更进一步

自 2021 年发布以来&#xff0c;Nacos 2.0 在社区的支持下已走过近三年&#xff0c;期间取得了诸多成就。在高性能与易扩展性方面&#xff0c;Nacos 2.0 取得了显著进展&#xff0c;同时在易用性和安全性上也不断提升。想了解更多详细信息&#xff0c;欢迎阅读我们之前发布的回…

【ETCD】【源码阅读】深入解析 Raft.Node 接口及其实现机制

Node 是 Raft 协议在分布式系统中的核心抽象之一&#xff0c;代表 Raft 集群中的一个节点。通过该接口&#xff0c;开发者可以控制节点的状态转变、日志复制、配置变更以及其他核心功能。本文将从源码层面对 Node 接口的各个方法进行逐一解析&#xff0c;并总结其背后的设计理念…