基准测试的开始
有一天,我对Matz在做RT的推文的内容感到好奇。
Flask有很多钩子和可扩展点,因此它只会减慢抽象调用树的一部分,并且我认为多个应用程序共存于一个进程中,除了HTTP请求外。应用程序上下文是单独准备使用的,否则它会很繁重。
-INADA Naoki(@甲烷)2018年10月20日
我并不是真的要求Python提供个人使用的速度,所以我想知道是否是这种情况。
但是,我对随后的推文中提到的名为Falcon的Web框架感到好奇,当我查找它时,我发现了官方基准测试结果。
显然,猎鹰非常快。
另一方面,我感兴趣的另一件事是在Gunicorn网站上。 Gunicorn是在使用Python构建应用程序服务器时经常使用的软件,但是已经发布了将Gunicorn用作嵌入式服务器的文档。
我一直对纯Python嵌入式服务器感兴趣,我甚至希望在Python中使用单个二进制文件的可用于生产的http服务器! !!
我写了一个名为
的文档。因此,我也担心Gunicorn的表现。
由于我对这方面的兴趣,什么是作为Python嵌入式服务器的快速服务器?
Flask和Falcon有何不同?我想知道
,所以我决定对其进行基准测试。
嵌入式Web服务器
这些是这次使用的Python嵌入式Web服务器。
- 独角兽
- 龙卷风
- 扭曲的
- wsgiref
正如我在上一节中所写,
Gunicorn是一种常用的wsgi服务器。 Tornado是前一篇文章中介绍的Web框架,并使用提供的wsgi服务器作为其功能之一。如果它不为人所知,它会扭曲吗?这是一个使用了很长时间的网络库,也用于Bittorrent代码;最近,还有一个实现Python的http2服务器。最后的wsgiref是模块名称,而不是库名称。它引用Python标准库中包含的参考实现的wsgi服务器。
网络框架
- 烧瓶
- 鹘
Flask是一个微框架,一段时间以来一直是热门话题。猎鹰是从那时起出现的微型框架。信息不多,但速度很快。唯一的谣言是,这是我不时听到的图书馆。
烧瓶代码
1
2
3
4
5
6 from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
return "Hello F1!"猎鹰代码
1
2
3
4
5
6
7
8
9 import falcon
class SampleApp:
def on_get(self, req, resp):
resp.body = "Hello F2!"
resp.status = falcon.HTTP_200
app = falcon.API()
app.add_route('/', SampleApp())两者都可以做得很小。
基准工具
蔬菜
到目前为止,简单的工作台使用的是apache工作台,但是这次我将使用这种蔬菜。它是由golang制成的,似乎相对易于使用。这次,负载以550rps的速度施加了180秒。
1 $ vegeta attack -duration=180s -rate 550基准结果
<表格>
服务器 th> 框架 th> 成功率[%] th> 均值[ms] th> 50%[ms] th> 95%[ms] th> 99%[ms] th> 最大值[ms] th>
tr>
header>
<身体>gunicorn td> 猎鹰 td> 100.00 td> 1.37 td> 0.91 td> 2.15 td> 12.12 td> 81.44 td>
tr>龙卷风 td> 猎鹰 td> 100.00 td> 1.13 td> 0.81 td> 1.65 td> 8.66 td> 52.87 td>
tr>扭曲 td> 猎鹰 td> 100.00 td> 2.31 td> 1.20 td> 4.58 td> 28.37 td> 136.24 td>
tr>wsgiref td> 猎鹰 td> 81.42 td> 790.66 td> 2.92 td> 3677.59 td> 16476.12 td> 44156.88 td>
tr>gunicorn td> 烧瓶 td> 100.00 td> 1.55 td> 1.16 td> 3.55 td> 7.59 td> 37.95 td>
tr>龙卷风 td> 烧瓶 td> 100.00 td> 2.96 td> 1.04 td> 6.19 td> 38.97 td> 568.63 td>
tr>扭曲 td> 烧瓶 td> 100.00 td> 1633.42 td> 1.99 td> 10066.98 td> 11590.31 td> 11918.90 td>
tr>wsgiref td> 烧瓶 td> 72.75 td> 815.74 td> 2.44 td> 4739.70 td> 16115.85 td> 44172.28 td>
tr>
tbody>
table>
考虑
当我这次尝试时,古尼康很稳定。是那个地方吗?亚军像龙卷风吗?毕竟,标准模块wsgiref并不是很快。 Falcon在库比较方面仍然更快。就像那样。但是,在某些情况下,如Twist会有很大的差异,而在某些情况下则不会像wsgiref一样出现,并且原因尚不清楚。对于Twisted Flask,Flask的处理速度可能很慢,而整个服务器的响应速度很慢。
那么Gunicorn Falcon好吗?事实并非如此。
建议使用nginx等反向代理Gunicorn,而Falcon的知识相对较少。印象数
我已经认真研究了各种Python嵌入式服务器,但是类型却令人惊讶。但是,如果您真的想在生产环境中进行操作,则需要了解安全性,并且如果正确考虑生产设置,则会遇到许多困难,例如缺乏专门知识。但是,我认为如果通过hackathon等快速制作它,可以足够使用它,因此我希望不时继续使用它。