Nat*_*les 2 python flask fastapi
我是一名对基准测试不感兴趣的开发人员,我正在尝试决定是否应该使用 Flask 还是 FastAPI 来构建一些 Python/Vue 项目。我在网上看到有关 FastAPI 如何比 Flask 更快的内容,因为 Flask 是单线程或类似的东西,而 FastAPI 是异步的,但显然最近 Flask 添加了异步路由,所以现在我想知道 FastAPI 是否仍然是(?) 比 Flask 更快。
有人做过比较 FastAPI 和 Flask 异步路由的基准测试吗?当我搜索谷歌时我找不到任何东西。
根据Miguel Grinberg 的基准研究,\nFastAPI 可能比异步 Flask 更快或更慢,具体取决于 Web 服务器和 Flask 异步类型。\n一般来说, Greenlet 支持的 WSGI 服务器(Meinheld / Gevent)上的 Flask 可以提供与异步 Flask 相当的吞吐量异步优先的 ASGI 框架,例如 FastAPI。\n请注意,Grinberg 正在比较三个部分的整体性能:框架、Web 服务器和 Web 应用程序。
\n以下是他尝试的三种不同场景下相关框架的吞吐量(数字越高越好):
\n| 框架 | 网络服务器 | 类型 | 测试 1 吞吐量 | 测试2吞吐量 | 测试3吞吐量 |
|---|---|---|---|---|---|
| 烧瓶 | 迈因霍尔德 | 异步/Greenlet | 1.43 | 5.27 | 1.06 |
| 烧瓶 | 格文特 | 异步/Greenlet | 1.22 | 4.54 | 1.01 |
| 快速API | 独角兽 | 异步/协程 | 1.21 | 4.33 | 1.02 |
| 艾奥弗拉斯 | 独角兽 | 异步/协程 | 1.11 | - | - |
| 烧瓶 | uWSGI | 同步 | 1.09 | 1.01 | 1.26 |
| 烧瓶 | 鳐鱼 | 同步 | 1.00(基线) | 1.00(基线) | 1.00(基线) |
* Meinheld是一个用 C 语言编写的 WSGI 服务器。
\nGrinberg 在他的文章中指出,框架之间的确切相对结果将取决于服务器所承受的特定负载,但他的结论是框架之间没有很大差异:
\n\n\n请记住,不同框架或 Web 服务器之间的性能差异不会非常显着,因此请选择能够提高您工作效率的工具!
\n
Flask 采用不同的异步视图方法。\n在 Grinberg 的基准测试中,实现了三种方法:Aioflask(带有 uvicorn 的标准 python ASGI)、Meinheld 中的 Greenlet 和 Gevent。由于Aioflask测试尚未完全完成,因此仅提供测试1的结果,该结果与Flask文档一致:
\n\n\n由于其实现方式,Flask\xe2\x80\x99s 异步/协程支持的性能低于异步优先框架。
\n
请注意,Greenlet方法需要一种特殊的方式来编写异步操作,而不是标准的 Python 协程。因此,现有的 asyncio 代码库需要使用greenletio等适配器进行修补。\nGevent 严重依赖于对 python 标准库、数据库引擎和其他性能关键库进行适当的猴子修补。
\n格林伯格在他的博客中多次谈到这一点:
\n\n\nGevent 测试在我的基准测试中表现相当不错,但在原始基准测试中却表现得非常糟糕。这是因为作者忘记修补 psycopg2 包,使其在 greenlet 下变为非阻塞。
\n
| 归档时间: |
|
| 查看次数: |
4810 次 |
| 最近记录: |