
在2018年,Python增强了它在程序员中的流行度,并
在github上进入了
最受欢迎的3种语言 。 越来越多的人朝着光明的一面……就是Python。 出现了更多对这种语言感兴趣的开发人员,并在其帮助下开发项目。 Web开发是Python最受欢迎的领域之一。 我不仅希望开发过程方便快捷,而且项目本身也可以拥有工作的速度和稳定性。
Python具有许多框架,这些框架使程序员不必进行常规操作,而使您可以专注于解决问题。 2018年,对现有框架进行了更新,并出现了新工具。
因此,我们决定对流行框架进行比较分析,希望这些框架在整个2019年都不会失去意义,并确定最快的框架。
测试参加者
版本: 2.1.4
描述:最受欢迎的Python处理器,开箱即用解决了许多问题(管理面板,授权,日志记录,ORM等)。 这简化了开发人员的工作,但是如果我们优先考虑工作速度,那么有时这样的处理器会对我们不利,这会影响生产率。 因此,他很可能不会在2019年获得最快的Python Web框架提名。
版本: 1.0.2
描述:最受欢迎的Python框架(甚至Django也超过了GitHub上的明星)。 在开发不需要Django中的包子的小型项目时,这是一个流行的选择。 允许您快速部署应用程序。 在速度方面也许比Django快,但是它几乎没有功能。
版本: 3.5.1
描述:一个非常有吸引力的异步Python框架。 它具有客户端和服务器版本,可在开发过程中极大地解放您的双手。 它具有来自客户端版本的非常方便的异步请求,以及具有大量请求的非常好的服务器速度指示符。 绝对应该进入前三名。
版本: 18.12
描述:我们可以说这是一个带有所有后果的“多线程烧瓶”。 因此,我们认为结果应该很好。
版本: 5.1.1
描述: Python运动的异步元老,在2010年引领了异步潮流。 它没有失去相关性,并于2018年获得了第5版。 初学者的入门门槛相当高。 在老派蟒蛇派中很受欢迎,我们有充分的理由认为。 必须显示出良好的效果。
测试版本: GitHub上
没有发布
描述:一个有前途的框架出现在2018年6月,并且在过去六个月中获得了4000多个星级。 在GitHub上有令人印象深刻的性能评估。 我们认为Vibora将是我们比赛的最爱,但是不幸的是,由于缺乏在Python> = 3.7下运行的能力以及缺乏框架的稳定版本,我们排除了Vibora。
在GitHub上,开发人员承诺很快会推出“全新”的Vibora。 让我们看看他们所做的事情,并一定要写下来。
测试方法
使用
WRK实用程序在Apple iMac 27''Retina 5K 2017,CPU:3.5GHz i5,RAM:8GB,1000GB Fusion Drive,OSX 10.14.2上进行了测试:
wrk -t12 -c400 -d30s http://127.0.0.1:8080/db/
测试是在Python 3.7.2上进行的。 所有框架都是使用
Gunicorn和两名工作人员启动的。 也许在某些情况下使用
uwsgi可能会影响结果,但是由于我们设定测试框架的目标,而不是如何运行框架,因此我们决定忽略这一点。
我们只有一种测试类型:DB测试,从数据库中获取字符串数据,并将其作为html响应返回(79字节中有1个条目)。 Postgres 11用作数据库,
Psycopg2用作同步框架的数据库访问驱动程序,而
asyncpg用作异步框架的数据库访问驱动程序。
异步框架的库决定使用
uvloop作为事件循环。
结果
每秒请求

aiohttp和Sanic相当期待领导职位,但Tornado却出乎意料。
每秒数据传输(Kb)

Django每秒传输的数据量远远落后。
平均请求时间(毫秒)

再次令人不愉快的是我们最初依赖的龙卷风。 Flask令人印象深刻,平均查询时间可与潜在领导者竞争。
最长请求时间(秒)

所有“实验性”结果在最长查询时间内显示几乎相同的结果。 一切都如我们所料。
最终结果
12个线程
400位联络人
| 平均 | 最高 | 请求/秒 | 传输/秒(KB) |
延迟(毫秒) | 要求/秒 | 延迟(毫秒) | 要求/秒 |
Django的 | 147.99 | 120.91 | 1.98 | 640 | 425.71 | 78,99 |
烧瓶 | 186.8 | 65.65 | 1.75 | 280 | 546.2 | 127.48 |
aiohttp | 165.07 | 247.16 | 1.98 | 585 | 1966.28 | 439.72 |
桑尼奇 | 194.8 | 170.85 | 1.98 | 470 | 1520.9 | 292.6 |
龙卷风 | 279.3 | 101.71 | 1.74 | 272 | 778.75 | 222.07 |
总结
Aiohttp: 2019年初的性能领导者。 如果您的任务需要最终的性能,那么您应该仔细研究一下。 另外,您可以尝试使用aiohttp启动选项来进一步压缩它。 它具有客户端版本,该版本允许您发出异步请求而无需其他库。 因此,为了实现我们新的高负载服务,我们选择了它。
Sanic:该框架
的普及领先于其性能。 奇迹没有发生,超越领导者没有用。 连同Reddit上有关安全性问题的主题-我们现在不会使用Sanic,而是等待开发人员采取行动。
龙卷风: “今年令人失望。” 结合结果-我们认为不应选择Tornado来实施任何新项目。 我们希望开发人员提出一些建议并纠正这种情况。
Django显示了预期的结果。 我们喜欢Django的功能,并喜欢我们的日常工作,而不是工作速度。 广泛的社区,大量的Web资料,公共领域中的大量已实施项目-所有这些都对初学者具有吸引力。 如果我们要快速开发典型Web服务的MVP,我们将在2019年选择它。
烧瓶也显示了预期的结果。 由于它没有现成的丰富功能,因此绕过了Django。 我没有达到异步框架的速度。 我们将在2019年选择它来实施小型宠物项目或在速度已经很重要的情况下使用,但目前还没有处理异步框架的愿望。
您可以在
Python Frameworks Benchmark存储库中查看所有源基准测试文件。