【Python】Hypercorn:轻量级的异步ASGI/WSGI服务器

news2024/11/30 9:51:11

在这里插入图片描述

Hypercorn 是一个支持异步 ASGI 和同步 WSGI 应用的高效 Python 服务器。它结合了现代协议支持(包括 HTTP/1、HTTP/2 和 HTTP/3),并且为异步 Web 框架(如 FastAPI 和 Quart)提供了卓越的性能和灵活性。通过 Hypercorn,开发者可以轻松处理高并发请求,同时支持多种协议和事件循环。

在这里插入图片描述
华丽的分割线

⭕️宇宙起点

    • 💯 核心功能
      • 1. 多协议支持
      • 2. 多事件循环支持
      • 3. 灵活的配置方式
      • 4. 优雅的关闭机制
    • 💯 示例代码
      • Hello World ASGI 应用
      • 使用 Trio 事件循环的示例
    • 💯 配置选项表
    • 💯 适用场景
    • 📥 下载地址
    • 💬 结语
    • 📒 参考文献


标题1

💯 核心功能

1. 多协议支持

Hypercorn 支持 HTTP/1、HTTP/2 和 HTTP/3 协议,同时也支持 WebSockets。HTTP/2 和 HTTP/3 的引入极大提高了并发性能和传输效率,尤其在需要处理大量并发请求的应用中表现优异。

2. 多事件循环支持

Hypercorn 不仅支持 Python 的 asyncio 事件循环,还支持 trio,并且与 uvloop 完全兼容。这种灵活性允许开发者根据应用的需求选择最合适的事件循环,以实现更高效的并发性能。

3. 灵活的配置方式

Hypercorn 提供了多种配置方式,包括:

  • 命令行参数:可以快速设置服务器启动参数。
  • TOML 文件:适合项目中统一管理配置。
  • Python 配置模块:可以通过动态代码生成配置文件。
    例如,可以使用 .toml 文件进行配置:
hypercorn --config config.toml

TOML 文件示例:

bind = "127.0.0.1:8000"
access_log_format = "%(h)s %(r)s %(s)s"

Python 动态配置示例:

from hypercorn.config import Config
config = Config()
config.bind = ["127.0.0.1:8000"]

4. 优雅的关闭机制

Hypercorn 支持优雅关闭功能,当收到退出信号(如 SIGTERM)时,服务器会等待正在处理的请求完成后才退出,避免请求丢失。以下是实现优雅关闭的代码示例:

import asyncio
import signal

async def app(scope, receive, send):
    if 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!',
        })

shutdown_event = asyncio.Event()

def _signal_handler(*_: Any) -> None:
    shutdown_event.set()

loop = asyncio.get_event_loop()
loop.add_signal_handler(signal.SIGTERM, _signal_handler)
loop.run_until_complete(serve(app, config, shutdown_trigger=shutdown_event.wait))

标题2

💯 示例代码

Hello World ASGI 应用

这是一个简单的 ASGI 应用,使用 Hypercorn 运行:

async def app(scope, receive, send):
    if 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!',
        })

运行命令:

hypercorn app:app --bind 127.0.0.1:8000

使用 Trio 事件循环的示例

import trio
from hypercorn.config import Config
from hypercorn.trio import serve

config = Config()
config.bind = ["127.0.0.1:8000"]

async def app(scope, receive, send):
    if 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 from Trio!',
        })

trio.run(serve, app, config)

标题3

💯 配置选项表

以下是 Hypercorn 常用的配置选项:

配置项命令行参数默认值说明
bind--bind127.0.0.1:8000监听的地址和端口
access_log_format--access-logformat%(h)s %(r)s %(s)s定义访问日志的格式
graceful_timeout--graceful-timeout300 秒在收到终止信号后,允许的最大优雅关闭时间
debug--debugFalse启用调试模式,提供更多日志信息
h2_max_concurrent_streamsN/A100HTTP/2 的最大并发流数量
include_server_headerN/ATrue是否包含 Server: Hypercorn 的响应头
read_timeout--read-timeoutTCP 读取超时时间
ca_certs--ca-certs指定 SSL CA 证书路径

标题4

💯 适用场景

Hypercorn 非常适合以下场景:

  1. 高并发异步应用:对于需要处理大量并发请求的应用,Hypercorn 的异步架构能够充分发挥其优势。
  2. 多协议支持:对于需要同时处理 HTTP/1、HTTP/2、HTTP/3 和 WebSockets 的应用,Hypercorn 提供了全面的支持。
  3. 优雅关闭需求:在生产环境中,应用可能需要在不中断现有请求的情况下安全退出,Hypercorn 提供了优雅关闭的能力。

标题5

📥 下载地址


Hypercorn 最新版 下载地址


标题7

💬 结语

Hypercorn 的灵活性和现代化协议支持,使其成为现代 Web 应用程序的理想选择,特别是在异步框架下,它能够显著提升应用的性能和响应速度。


标题8

📒 参考文献

  • Hypercorn GitHub仓库

TheEnd


在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2191657.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2.创建第一个MySQL存储过程(2/10)

引言 在现代数据库管理中,存储过程扮演着至关重要的角色。它们是一组为了执行特定任务而编写的SQL语句集合,这些语句被保存在数据库中,并且可以被多次调用执行。存储过程不仅可以提高数据库操作的效率,还能增强数据的安全性和一致…

来自德国的义齿雕刻机电主轴SycoTec 4033

在口腔医学的精密世界中,每一次技术的飞跃都意味着患者体验与治疗效果的双重提升。随着数字化、自动化技术的蓬勃发展,义齿加工领域正经历着前所未有的变革,而德国SycoTec公司推出的4033高速电主轴卓越的性能和广泛的应用性,提升了…

计算机毕业设计 网上体育商城系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

Python第三方库选择与使用陷阱避免

Python第三方库选择与使用陷阱避免 Python 生态系统丰富多样,其中的第三方库提供了许多强大的功能,使得开发者可以快速构建应用。然而,随着第三方库的增多,如何选择合适的库并避免一些常见的使用陷阱成为了开发者需要关注的重点。…

ChatGPT Canvas:交互式对话编辑器

自两年前 ChatGPT 发布以来,主流 AI 均以对话形式进行交互。传统的对话式界面可以直观看到反馈结果,但在需要深度编辑和协作的项目中就略显局限。为了解决此问题,几个月前 Claude 就发布过 Artifacts 功能,用来拓展原有对话。而现…

ROS C++ : 通过 ROS Service 实现进程间同步函数调用

文章目录 1、基本概念1.1、官方定义1.2、Service服务与Topic话题的区别 2、C 代码编写2.1、自定义 .srv 文件2.2、C 服务端代码编写2.3、C 客户端代码编写2.4、CMakeLists.txt 文件编写2.5、package.xml文件编写 3、编译运行3.1、执行 catkin_make 编译程序3.2、执行 source 部…

爬虫——XPath基本用法

第一章XML 一、xml简介 1.什么是XML? 1,XML指可扩展标记语言 2,XML是一种标记语言,类似于HTML 3,XML的设计宗旨是传输数据,而非显示数据 4,XML标签需要我们自己自定义 5,XML被…

计算机网络——ftp

在网络通信中,控制连接和数据连接是两种不同类型的连接,它们各自具有特定的功能和用途。 一、控制连接 定义与功能: 控制连接主要用于在通信双方之间传输控制信息,以建立、维护和终止数据连接。它负责协调和管理数据传输的过程&am…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-05

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-04 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-04目录1. LLM-Augmented Symbolic Reinforcement Learning with Landmark-Based Task Decomposition摘要研究背景问题与挑战如何…

如何用python抓取豆瓣电影TOP250

1.如何获取网站信息? (1)调用requests库、bs4库 #检查库是否下载好的方法:打开终端界面(terminal)输入pip install bs4, 如果返回的信息里有Successfully installed bs4 说明安装成功(request…

【JavaEE】——文件IO的应用

阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 一:文件的搜索(面试高频) 二:文件的复制 三&#xff1a…

森林火灾的预防方案

对于森林火灾的预防,我们需要了解森林火灾形成的原因。一般来森林火灾的形成分为自然原因和人为原因;自然原因多为干燥天气的自燃、雷电火等,而人为原因多是农、林、牧业生产用火,林副业生产用火,以及工矿运输生产用火…

无人机(自组穿越机,航模)-芯片选型

飞控MCU: 型号尺寸子型号参数规格备注STM325*532位ARM Cortex-M3 CPU,72MHz,256KB Flash,20KB RAMLQFP 48F33*332位ARM Cortex-M4 CPU,72MHz,256KB Flash,40KB RAMMPU6050F45*532位ARM Cortex-M4 CPU&…

分享我“Excel 表格”关键字的博客笔记(python脚本全程自动)

Python脚本全程自动,全部Python内建工具脚本纯净。 (笔记模板由python脚本于2024年10月05日 19:51:06创建,本篇笔记适合喜欢Excel和Python的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大…

MQ(仅供自己参考)

同步通讯的优缺点: 优点:时效高,数据一致,过程简单 缺点:耦合度高。性能下降。CPU等待资源的浪费。级联失败。 2、异步通讯:异步调用常见的实现就是事件驱动模式 异步的优缺点: 优点&#xf…

隐喻的使用及误用

Larry Constantine 著,whoisred 译 长期以来,在图形用户界面设计中,隐喻(metaphor)一直很流行。但是,虽然有少数简单的隐喻——如文件夹及垃圾箱——令人击节叫好,可事实上,大多数隐…

去噪扩散模型

Denoising Diffusion Probabilistic Models 图像扩散模型是一种生成模型,它基于概率扩散过程来生成新的图像。 核心步骤包括:(1)前向扩散过程;(2)逆向扩散过程 前向扩散过程(正向过…

第十五周:机器学习笔记

第十五周周报 摘要Abstract一、机器学习1. 各式各样神奇的自注意力机制1.1 Local Attention/Truncated Attention(截断注意力机制)1.2 Stride Attention(跨步注意力机制)1.3 Global Attention(全局注意力机制&#xff…

Jenkins pipeline配置示例

前提条件&#xff1a;已经安装Jenkins并能正常启动 如果Jenkins安装启动遇到问题可以参考&#xff1a; 1.创建pipeline 点击新建项目&#xff1a; 输入名称&#xff0c;选择pipeline&#xff1a; 进入配置页面&#xff0c;如果要配置GitHub Webhook要勾选&#xff1a;<fo…

k8s 中的金丝雀发布(灰度发布)

目录 1 什么是金丝雀发布 2 Canary 发布方式 3 Canary 两种发布方式实操 3.1 准备工作 3.1.1 将 nginx 命名两个版本 v1 与 v2 3.1.2 暴露端口并指定微服务类型 3.1.3 进入 pod 修改默认发布文件 3.1.4 测试 service 是否正常 3.2 基于权重的灰度发布 3.2.1 创建 Igress 资源类…