搜索
首页后端开发Python教程为什么您的 FastAPI(或 Flask)应用程序在高负载下表现不佳

Why your FastAPI (or Flask) App performs poorly with high loads
首先,为标题诱饵道歉?,但我昨晚解决了这个问题,而且我仍然受到多巴胺激增的影响。我只是想分享这个。

本文面向入门级开发人员或数据科学家(而不是高级 Python 软件工程师),我会将其写为叙述性内容,或者换句话说,按照事件发生的时间顺序排列,而不是“技术论文” (以问题、解决方案、讨论为结构)。我喜欢这种方法,因为它展示了现实生活中事情是如何发生的。

初步考虑

这些测试是在 GCP Cloud Run 上使用单处理器和 512M RAM 机器完成的,我们使用了 Locust,这是一个令人难以置信的工具(对于 Python,哈哈)。

此外,如果您在 Postman 上的单个请求上已经遇到性能问题,我强烈建议您看一下这个致力于提高 Kisspeter 的 FastAPI 性能的存储库以及来自 LoadForge 的这个存储库。

第一轮测试

在 Postman 中使用单个请求,Cloud Run 启动后,我得到了大约 400 毫秒的响应时间。不是最好的,但完全在可以接受的范围内。

我们的负载测试非常简单:在一个表中读取、写入和删除(或对 API 端点进行 GET、POST 和 DELETE)。 75% 读取,20% 写入,5% 删除。我们在 100 个并发用户的情况下运行 10 分钟。

Why your FastAPI (or Flask) App performs poorly with high loads

最后我们得到了 2 秒的平均响应时间,但最令人不安的部分是测试结束时平均时间仍在增加,因此在稳定之前(并且如果)该数字很可能仍会增加更多.

我尝试在我的机器上本地运行它,但令我惊讶的是,Postman 的响应时间只有 14 毫秒。然而,当运行500个并发用户的负载测试时,问题又出现了? ...

Why your FastAPI (or Flask) App performs poorly with high loads

到测试结束时,响应时间约为 1.6 秒,并且仍在增加,但出现了一些故障,第 95 个百分位数飙升(并破坏了图表 =( )。以下是统计数据:

Why your FastAPI (or Flask) App performs poorly with high loads

现在,为什么响应时间为 14 毫秒的服务器在只有 500 个并发用户的情况下突然达到 1.6 秒?

我的机器是酷睿 i7、6 核、2.6GHz、16Gb RAM、SSD。这不应该发生。

给我一个很好的提示的是我的处理器和内存日志......它们非常低!

这可能意味着我的服务器没有使用我机器上的所有资源。你猜怎么着?事实并非如此。让我向您介绍一个绝大多数开发人员在将 FastAPI 或 Flask 应用程序部署到生产环境时忘记的概念:流程工作人员。

根据 getorchestra.io:

了解服务器工作者

服务器工作人员本质上是运行应用程序代码的进程。每个工作人员一次只能处理一个请求。如果您有多个工作人员,您可以同时处理多个请求,从而提高应用程序的吞吐量。

为什么服务器工作人员很重要

  • 并发:它们允许并发处理请求,从而更好地利用服务器资源并加快响应时间。
  • 隔离:每个worker都是一个独立的进程。如果一名工作人员出现故障,不会影响其他工作人员,从而确保更好的稳定性。
  • 可扩展性:调整工作人员数量可以轻松扩展您的应用程序以处理不同的负载。

实际上,您所需要做的就是将可选的 --workers 参数添加到服务器初始化行中。您需要多少工作线程的计算在很大程度上取决于运行应用程序的服务器以及应用程序的行为:尤其是在内存消耗方面。

这样做之后,我在本地为 16 个工作人员获得了更好的结果,10 分钟后收敛到 90 毫秒(对于 500 个并发用户):

Why your FastAPI (or Flask) App performs poorly with high loads

最后一轮测试

使用适当数量的工作线程配置微服务后(我的单处理器 Cloud Run 实例使用了 4 个),我在 GCP 中的结果非常好:

Why your FastAPI (or Flask) App performs poorly with high loads

在GCP服务器测试结束时最终值收敛到300ms,至少是可以接受的。 ?

以上是为什么您的 FastAPI(或 Flask)应用程序在高负载下表现不佳的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
Python:编译器还是解释器?Python:编译器还是解释器?May 13, 2025 am 12:10 AM

Python是解释型语言,但也包含编译过程。1)Python代码先编译成字节码。2)字节码由Python虚拟机解释执行。3)这种混合机制使Python既灵活又高效,但执行速度不如完全编译型语言。

python用于循环与循环时:何时使用哪个?python用于循环与循环时:何时使用哪个?May 13, 2025 am 12:07 AM

useeAforloopWheniteratingOveraseQuenceOrforAspecificnumberoftimes; useAwhiLeLoopWhenconTinuingUntilAcIntiment.ForloopSareIdeAlforkNownsences,而WhileLeleLeleLeleLoopSituationSituationSituationsItuationSuationSituationswithUndEtermentersitations。

Python循环:最常见的错误Python循环:最常见的错误May 13, 2025 am 12:07 AM

pythonloopscanleadtoerrorslikeinfiniteloops,modifyingListsDuringteritation,逐个偏置,零indexingissues,andnestedloopineflinefficiencies

对于循环和python中的循环时:每个循环的优点是什么?对于循环和python中的循环时:每个循环的优点是什么?May 13, 2025 am 12:01 AM

forloopsareadvantageousforknowniterations and sequests,供应模拟性和可读性;而LileLoopSareIdealFordyNamicConcitionSandunknowniterations,提供ControloperRoverTermination.1)forloopsareperfectForeTectForeTerToratingOrtratingRiteratingOrtratingRitterlistlistslists,callings conspass,calplace,cal,ofstrings ofstrings,orstrings,orstrings,orstrings ofcces

Python:深入研究汇编和解释Python:深入研究汇编和解释May 12, 2025 am 12:14 AM

pythonisehybridmodelofcompilationand interpretation:1)thepythoninterspretercompilesourcececodeintoplatform- interpententbybytecode.2)thepytythonvirtualmachine(pvm)thenexecuteCutestestestesteSteSteSteSteSteSthisByTecode,BelancingEaseofuseWithPerformance。

Python是一种解释或编译语言,为什么重要?Python是一种解释或编译语言,为什么重要?May 12, 2025 am 12:09 AM

pythonisbothinterpretedAndCompiled.1)它的compiledTobyTecodeForportabilityAcrosplatforms.2)bytecodeisthenInterpreted,允许fordingfordforderynamictynamictymictymictymictyandrapiddefupment,尽管Ititmaybeslowerthananeflowerthanancompiledcompiledlanguages。

对于python中的循环时循环与循环:解释了关键差异对于python中的循环时循环与循环:解释了关键差异May 12, 2025 am 12:08 AM

在您的知识之际,而foroopsareideal insinAdvance中,而WhileLoopSareBetterForsituations则youneedtoloopuntilaconditionismet

循环时:实用指南循环时:实用指南May 12, 2025 am 12:07 AM

ForboopSareSusedwhenthentheneMberofiterationsiskNownInAdvance,而WhileLoopSareSareDestrationsDepportonAcondition.1)ForloopSareIdealForiteratingOverSequencesLikelistSorarrays.2)whileLeleLooleSuitableApeableableableableableableforscenarioscenarioswhereTheLeTheLeTheLeTeLoopContinusunuesuntilaspecificiccificcificCondond

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境