Granian:Rust 编写的 Python HTTP 服务器
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 许可证开源。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)