Screaming-fast Python 3.5+ HTTP toolkit integrated with pipelining HTTP server based on uvloop and picohttpparser.
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 9 年前 | ||
| 9 年前 | ||
| 8 年前 | ||
| 9 年前 | ||
| 6 年前 | ||
| 7 年前 | ||
| 8 年前 | ||
| 7 年前 | ||
| 9 年前 | ||
| 6 年前 | ||
| 9 年前 | ||
| 9 年前 | ||
| 9 年前 | ||
| 7 年前 | ||
| 7 年前 | ||
| 7 年前 | ||
| 9 年前 | ||
| 6 年前 |
Japronto!
当前项目没有新开发活动,但也没有被废弃,欢迎提交拉取请求和新的维护者加入。
如果你是Python初学者,不喜手动处理底层细节,或者不具备C语言的基础知识,这个项目可能不适合你。
Japronto(源自葡萄牙语“já pronto”,意为“已完成”)是一个__超高速__、可扩展、基于Python 3.5及更高版本的__异步HTTP工具包__,集成了使用了uvloop和picohttpparser的__流水线HTTP服务器__。它旨在吸引性能爱好者、喜欢底层编程的人以及早期采用者。
更多信息可参考在Medium上的发布文章《每秒百万次请求:仅用Python》。
性能表现
以下图表展示了使用Japronto你能达到的性能级别:

用户@heppu指出,如果Go的标准库HTTP服务器代码编写的更为精细,其性能可以比图中展示的高出12%。此外,Go的fasthttp服务器在这个特定基准测试中只比Japronto慢18%,这非常棒!详情请见Pull Request #12 和 Pull Request #14。
这些“Hello World”应用的测试结果是在AWS c4.2xlarge实例上获得的。为了公平起见,所有参赛者(包括Go)都运行着单个工作进程。服务器的压力测试使用了wrk,配置为1个线程,100个连接,每个连接24个并发(管道化)请求,总计并行2400个请求。
基准测试的源代码可以在benchmarks目录下找到。
该服务器通过手工优化的C语言编写,力求充分利用现代CPU的优势。它依赖于picohttpparser来解析头信息和分块编码,而uvloop提供了异步I/O功能。同时,它试图通过尽可能地合并写操作来减少系统调用。
预览版说明
这是一个早期预览版,实现质量为alpha级,API可能会在不同版本间发生变化,并需要更多测试。目前不宜用于任何重要应用,尤其不适合生产环境。不过,我们鼓励您试用并反馈意见。如果您正在寻找下一个项目的框架,推荐考虑Sanic。
目前的工作重点是CPython,但我已将PyPy纳入视线,但在今年晚些时候PyPy达到3.5兼容性,并清除大部分已知的JIT回归问题之前,我不会深入研究。
Hello World示例
一个简单的Japronto Web应用程序看起来像这样:
from japronto import Application
def hello(request):
return request.Response(text='Hello world!')
app = Application()
app.router.add_route('/', hello)
app.run(debug=True)
教程
特性
- 支持HTTP 1.x,包含分块上传
- 完全支持HTTP流水线技术
- 带配置选项的长连接管理器
- 支持同步和异步视图处理
- 基于forking的主-多工作进程模型
- 代码更改自动重载
- 简化的路由机制
许可协议
本软件遵循MIT许可证分发。这是一种非常宽松的许可证,允许你在任何商业和非商业项目中使用此软件。完整的许可证文本包含在LICENSE.txt文件中。
本软件的源分布中包含了同样以MIT许可证发布的picohttpparser副本。