ASGI Server之hypercorn

news/2024/10/18 8:36:13/

官方文档

简介

产生背景

Hypercorn最初是Quart(一款异步python微框架)的一部分,后来被分离成一个独立的ASGI服务器。Hypercorn从Quart的0.5.0版本分叉。

结构

Hypercorn是一款基于sans-io hyper、h11、h2和wsproto库的ASGI网络服务器,其灵感来自Gunicorn。它使用了异步的网络库,例如 asyncio 和 uvloop,以实现高吞吐量和并发性能.
Hypercorn支持HTTP/1、HTTP/2、WebSockets(通过HTTP/1和HTTP/2)、ASGI/2和ASGI/3规范。Hypercorn可以使用异步、uvloop或Trio worker 类型。

#什么是Trio

I/O Worker

I/O worker 是用于执行 I/O 密集型任务的工作任务类型。它们通常用于执行需要进行网络请求、文件操作或其他 I/O 操作的任务。I/O worker 会被自动调度,以便在 I/O 操作等待时让其他任务运行。

CPU Worker

CPU worker 是用于执行 CPU 密集型任务的工作任务类型。它们通常用于执行需要大量计算的任务,如数学运算、数据处理等。与 I/O worker 不同,CPU worker 不会主动让出执行权,因此需要开发人员手动管理 CPU worker 的调度。

自定义 Worker

除了内置的 I/O worker 和 CPU worker,Trio 还支持创建自定义的 worker 类型。这允许开发人员根据具体的应用场景创建适合特定类型任务的工作任务类型。

特点和优势

高性能

Hypercorn 使用异步的网络库和事件循环,能够处理大量并发请求,并提供出色的性能和响应时间。

ASGI 兼容

作为一个符合 ASGI 规范的服务器,Hypercorn 可以无缝集成和运行 ASGI 应用程序,与现代的 Python Web 框架兼容。

异步支持

Hypercorn 基于 asyncio 和 uvloop,利用异步编程的优势,可以处理 IO 密集型任务,并充分利用计算资源。

配置灵活

Hypercorn 提供了丰富的配置选项,可以根据需求进行灵活的服务器配置,包括绑定地址、端口、工作进程数、SSL 支持等。

调试友好

Hypercorn 提供了调试模式和详细的日志记录,方便开发者进行故障排查和性能分析。

相对与gunicorn的区别

Gunicorn(Green Unicorn)和 Hypercorn 是两种不同的 Python Web 服务器,它们在运行原理和架构上略有不同。

Gunicorn

Gunicorn 是一个基于 WSGI(Web Server Gateway Interface)的服务器。它使用多进程模型来处理并发请求。
在启动时,Gunicorn 主进程会创建多个 worker 进程。每个 worker 进程都会监听指定的地址和端口,并独立地处理请求。
当请求到达时,主进程会将请求分配给一个空闲的 worker 进程来处理。这些 worker 进程使用预先加载的应用程序代码来处理请求,并将响应返回给客户端。
Gunicorn 的主进程还负责管理 worker 进程的生命周期,包括自动重启、故障恢复和负载均衡等。

Hypercorn

Hypercorn 是一个基于 ASGI(Asynchronous Server Gateway Interface)的服务器。它使用异步的设计来处理并发请求。
在启动时,Hypercorn 创建一个主事件循环,并监听指定的地址和端口。
当请求到达时,Hypercorn 使用异步的网络库和事件循环,如 asyncio 和 uvloop,来处理请求。它可以同时处理多个请求,并利用异步编程的优势来提高性能和吞吐量。
Hypercorn 还支持与异步的 Python Web 框架集成,这些框架通常使用 ASGI 接口与 Hypercorn 进行交互。


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

相关文章

Spring Boot定义类处理API通用返回数据

枚举类AppHttpCodeEnum package com.yutu.common.core.constant;public enum AppHttpCodeEnum {SUCCESS(200, "操作成功"), // 成功段0REQUEST_NOT_FOUND(404, "请求不存在!"),HTTP_BAD_METHOD(405, "请求方式不支持!"),…

类和对象(2)——封装(封装的概念、包、staic)

前言 面向对象程序三大特性:封装、继承、多态。而类和对象阶段,主要研究的就是封装特性。何为封装呢?简单来说就是套壳屏蔽细节。 一、什么是封装 1.1 概念 将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节&…

成长工作思考

前言 这一篇,不是技术博客,而是个人发展的一些思考和总结,复盘才会做的更好,成长的道路当然不是随着时间推移 开场白 不劳而获的是时间,完全免费的,但是免费的同时也是最贵的。向前看仿佛时间悠悠无边&a…

SLICEM是如何将查找表配置为分布式RAM/移位寄存器的

1.首先说SliceM和SliceL如何配置为ROM的 一个SLICE包含4个六输入查找表,因此每个查找表就能存储64bit的数据,要实现128bit的ROM,只需要通过两个LUT就可实现,具体如下表: 2.如何配置成为分布式RAM SLICEM中的LUT如下图&#xff…

力扣:141. 环形链表

力扣:141. 环形链表 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾…

Linux之安装Nginx

目录 传送门前言一、快速安装二、反向代理语法1、基本语法2、location语法1. 基本语法2. 匹配规则3. 修饰符4. 权重5. 嵌套location6. 其他指令7.案例 三、配置反向代理 传送门 SpringMVC的源码解析(精品) Spring6的源码解析(精品&#xff0…

C++/Qt 小知识记录5

工作中遇到的一些小问题,总结的小知识记录:C/Qt 小知识5 Windows下查看端口占用情况C调用Python三方库测试库有没有被加上的测试方法初始化使用Python的env环境,用Py_SetPythonHome设置GDAL相关的,需要把osgeo、rasterio的路径加入…

HashMap,HashTable与ConcurrentHashMap

目录 正文: 1.HashMap 1.1概念 1.2原理 1.3线程不安全 2.HashTable 2.1概念 2.2原理 2.3线程安全 3.ConcurrentHashMap 3.1概念 3.2原理 3.3线程安全 总结: 正文: 1.HashMap 1.1概念 HashMap是Java中的一个数据结构&#xf…