Granian:Rust 编写的 Python HTTP 服务器
Granian是用Rust编写的高性能Python HTTP服务器,支持ASGI/3、RSGI和WSGI接口,统一了Python Web应用部署方案。基于Hyper和Tokio构建,支持HTTP/1、HTTP/2、HTTPS及WebSocket协议,具有智能并发控制、静态文件服务等特性。相比传统组合方案(如Gunicorn+uvicorn),它简化了依赖管理,提供更优性能。适用于需要单一依赖支持多
Granian:Rust 编写的 Python HTTP 服务器
emmett-framework/granian 目前收获了 5,396 个 Star。


Granian 是一个用 Rust 编写的 HTTP 服务器,用于托管 Python 应用。它基于 Hyper 和 Tokio 构建,目标是提供一个统一且正确的 HTTP 实现,同时支持 HTTP/1 和 HTTP/2 协议。
在 Python 生态中,部署 Web 应用通常需要组合多个工具。Unix 系统上常见的方案是 Gunicorn 加 uvicorn,再搭配 http-tools。Granian 试图用一个包替代这种组合,简化依赖管理。它同时支持 ASGI/3、RSGI 和 WSGI 三种应用接口,覆盖了异步和同步两种应用模型。
RSGI 是 Granian 自身定义的接口规范,语法比 ASGI 更简洁。对于习惯写同步代码的开发者,WSGI 接口也完全可用。
安装只需要一条命令:
$ pip install granian
启动应用同样直接。ASGI 应用:
$ granian --interface asgi main:app
RSGI 应用:
$ granian --interface rsgi main:app
WSGI 应用:
$ granian --interface wsgi main:app
Granian 的配置项很全面。工作者数量、阻塞线程数、运行时线程数、事件循环实现都可以调整。默认情况下,它会根据配置自动选择最优的运行模式。HTTP/2 的流控、并发流数、帧大小等参数均可配置。它还支持静态文件直接 serving,无需经过 Python 应用层处理。
Granian 引入了 backpressure 机制来控制并发。它在每个工作者的连接接收循环中运作,当待处理请求过多时暂停接收新连接。这个值需要根据应用特点调整。异步应用通常用默认值即可,因为 AsyncIO 事件循环本身就能挂起和恢复任务。同步应用的情况更复杂:如果应用代码从不执行 I/O,那并发上限基本等于阻塞线程数,backpressure 设置过高没有实际意义;如果应用内部会发起外部网络请求或操作数据库,适当提高 backpressure 可以充分利用等待时间处理其他请求。
在架构层面,Granian 的运行时有两种模式。st 模式会为每个运行时线程创建独立的单线程 Rust 运行时,mt 模式则创建一个多线程运行时。前者在进程数较少时效率更高,后者在 CPU 核心较多的场景下扩展性更好。auto 模式会根据其余配置自动选择。
在协议层面,Granian 支持 HTTP/1、HTTP/2、HTTPS、mTLS 和 WebSocket。监控方面,它内置了 Prometheus 格式的指标导出,涵盖工作者状态、连接数、请求处理量等数据。日志系统直接复用 Python 标准库的 logging 模块,配置方式与常规 Python 项目一致。
这个项目的选型建议是:当你需要单一依赖同时服务 ASGI 和 WSGI 应用,或者对 HTTP/2 下的性能有硬性要求,又或者需要高并发的 WebSocket 支持时,Granian 是一个值得考虑的选择。反过来,如果你需要纯 Python 方案、依赖 trio 或 gevent、或者需要某些尚未实现的 ASGI 扩展,那它就不太适合。
Granian 已经被多个知名项目投入生产使用,包括 paperless-ngx、reflex、searxng、Weblate 等。Microsoft、Mozilla 和 Sentry 也在内部使用它。
项目要求 Python 3.10 及以上版本,采用语义化版本管理,以 BSD 许可证开源。
要求 Python 3.10 及以上版本,采用语义化版本管理,以 BSD 许可证开源。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)