一个纯 Python WSGI 服务器

71 天前
 abersheeran

https://github.com/abersheeran/zibai

相比于 gunicorn ,兹白的性能更好,并且可以在 Windows 上直接使用。

相比于 waitress ,兹白在不使用 gevent 时单进程性能与它相当,在重载情况下比 waitress 更稳定。兹白可以和 gevent 一起使用,并内置了多进程模式。

兹白还内置了子进程卡死检测,保证了在子进程意外卡死时能得到妥善处理,保证业务稳定。支持了 HUP 、TTIN 、TTOU 信号用于管理子进程,支持零停机更新。使用了 h11 这一被 uvicorn 、httpx 、hypercorn 等库广泛使用的解析器,确保了 HTTP 协议的正确性。


具体性能测试数据可以查看仓库中的 benchmark 文件。已经在一些公司业务(主要是朋友们的公司业务)上稳定运行,效果良好。还有朋友说运行起来子进程处理请求的均衡性要比 gunicorn 更好。欢迎大家尝试、反馈问题。

因为兹白是我在维护 uvicorn 时的想法,所以兹白里的多进程管理器我提交 PR 到了 uvicorn 上,这也是 tiangolo 向我捐赠 1000 美金时提到的 PR ,可谓价值千金😝。

兹白的名称受 gunicorn 、uvicorn 命名的影响,它们都是 unicorn (独角兽)的变种。《山海经》中提到“中曲之山有兽焉,其状如马而白身黑尾,一角,虎牙爪,音如鼓音,其名曰駮,是食虎豹,可以御兵”,《逸周书·王会》又有记载“正北方义渠以兹白,兹白者若白马。锯牙,食虎豹”。所以可以认定兹白就是駮这种长相类似于独角兽的别名,由于駮的名字在 pypi 上已经被使用,于是用了兹白。

3089 次点击
所在节点    Python
22 条回复
abersheeran
65 天前
@abersheeran #20 查到了,gunicorn 一开 gevent ,连 http 都不自己处理了,全丢给 gevent ,gunicorn 就只管进程。zibai 的用法是只用 gevent monkey patch 。gevent.wsgi 在 Linux 上比 zibai.h11 快的原因还得再查查。
fzzff
64 天前
https://github.com/emmett-framework/granian 这个也可以了解下, rust 开发性能也不错

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1029926

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX