CalPaterson译者
香槟超新星,责编
夕颜出品
CSDN(ID:CSDNnews)
大多数人都认为异步Python的并发程度更高。这意味着对于动态网站或WebAPI等常见任务,异步能提供更高的性能。
但遗憾的是,对于Python解释器来说,异步并不能提供加速的推力。
在现实情境下(请参考下图),异步Web框架的吞吐量(请求/秒)表现更差一些,而响应延迟则差的更多。
基准结果
我测试了各种不同的同步和异步Web服务器配置:
P50和P99的响应时间以毫秒为单位,Throughput(吞吐量)以每秒请求量为单位。这个表格按P99排序,我认为这可能是现实世界中最重要的统计信息。
要注意以下几点:
1、表现最好的几个都是同步框架
但Flask的吞吐量比其他的要低
2、表现最差的几个都是异步框架
3、异步框架的响应延迟方面也差得多
4、基于uvloop的循环比内置的asyncio循环更好
因此,如果非要用asyncio,请选择uvloop
这些基准测试真的具有代表性吗?
我认为的确如此。我尽力使它们贴近现实情况了,使用的架构是这个:
我尽可能地模拟真实世界的部署:一个反向代理,python代码(比如变量),后面再跟着一个数据库。我还加入了一个外部数据库连接池,因为我认为在Web应用程序实际部署中这种做法相当常见(至少对postgresql来说是这样的)。
测试的应用程序通过随机key查询数据库某行,并将值以JSON的形式返回。完整的源代码可在github上找到。
(链接: