前言

index.py这是一个异步 web 框架,设计目的在于快速的构建需要的 web 服务,无论是 Templates 还是 API。

其非常相似于FastAPI,但融合了Django的CBV,再加上极其灵活的路由,可以一架两用,无论是习惯了Falsk和Fastapi的FBV写法还是Django的CBV写法,都可以很快的适应这个框架。

安装

需要注意的是,index.py要求的Python版本至少是3.7,如果不愿意升级版本的话,可以使用 docker 来运行 Index.py。

pip install -U index.py
pip install uvicorn

由于是ASGI应用,使用uvicorn作为服务器。

性能测试及对比

我挑选了Fastapi和django3.1作为性能对比对象。使用ApacheBench来进行压测

由于机器性能问题,总请求数5000,并发100

ab -n 5000 -c 100 http://127.0.0.1:4950/hello

首先是FastAPI:

创建三个进程来进行测试。uvicorn main:app --port=4950 --workers=3

可以看到,作为python的异步web框架,FastAPI傲视wsgi群雄,处理五千个请求花费0.38秒。每秒可处理1w3个请求。


然后测一下django3:

由于django3已经支持asgi了,所以我们同样可以使用uvicorn来启动。

uvicorn test_django.asgi:application --workers=3

不知道是不是我的方式有误否,这个成绩着实差距很大,重来,我们使用gunicorn来配合uvicorn。写一个配置文件gunicorn.conf.py

workers = 3
threads = 3
bind = ['127.0.0.1:8000']
worker_class = 'uvicorn.workers.UvicornWorker'
daemon = False

然后通过gunicorn来启动

gunicorn test_django.asgi:application -c ./gunicorn.conf.py

好吧盖了帽了,看来作为重量级框架,Django其在速度方面还需要一些进化。


接下来是主角:index.py

uvicorn main:app --port=4910 --workers=3

ohhhh,0.31秒完成,每秒处理1w5的请求量,比fastapi还快那么一丝。不过在构建应用时会对数据库有操作,所以这一丝也说明不了什么问题。

总结

index.py可以作为Django与FastAPI特性的桥梁,虽然它不像Django、Flask、FastAPI、tornado这些web框架这么出名,但是好用是真滴好用。

引用一位大佬的话:一项新技术的出现和应用,常常会给这个领域带来深刻的变革,古语有云:察势者智,顺势者赢,驭势者独步天下。所以,只有拥抱未来、拥抱新技术、顺应时代才是正确的、可持续发展的道路。