目录
优化 FastAPI 中大型数据集的 JSON 响应时间
首页 后端开发 Python教程 如何优化 FastAPI 中大型数据集的 JSON 响应时间?

如何优化 FastAPI 中大型数据集的 JSON 响应时间?

Oct 18, 2024 pm 11:02 PM

How to Optimize JSON Response Times for Large Datasets in FastAPI?

优化 FastAPI 中大型数据集的 JSON 响应时间

问题:

从FastAPI 端点明显慢,大约需要一分钟。数据最初使用 json.loads() 从 parquet 文件加载,并在返回之前进行过滤。寻求一种更快的方法来传递数据。

解决方案:

响应时间缓慢源于 parse_parquet() 函数中的多次 JSON 转换。 FastAPI 自动使用 jsonable_encoder 对返回值进行编码,然后使用 json.dumps() 对其进行序列化,这是一个耗时的过程。像 orjson 或 ujson 这样的外部 JSON 编码器可以提供潜在的速度增强。

但是,最有效的解决方案是避免不必要的 JSON 转换。以下代码利用自定义 APIRoute 类来启用来自 pandas DataFrame 的直接 JSON 响应:

<code class="python">from fastapi import APIRoute

class TimedRoute(APIRoute):
    # Custom handler for capturing response time
    def get_route_handler(self):
        original_route_handler = super().get_route_handler()
        
        async def custom_route_handler(request):
            before = time.time()
            response = await original_route_handler(request)
            duration = time.time() - before
            response.headers["Response-Time"] = str(duration)
            print(f"route duration: {duration}")
            return response

        return custom_route_handler</code>
登录后复制

此代码允许您比较不同数据转换方法的响应时间。使用具有 160,000 行和 45 列的示例 parquet 文件,获得以下结果:

  • 默认 FastAPI 编码器 (json.dumps()): 最慢
  • orjson: 与默认编码器相当
  • ujson: 比 orjson 稍快
  • PandasJSON (df.to_json()): 速度明显更快

为了改善用户体验,请考虑使用附件参数和文件名设置 Content-Disposition 标头来启动下载,而不是在浏览器中显示数据。这种方法绕过了浏览器限制并加快了处理速度。

此外,Dask 提供了大型数据集的优化处理,提供了 pandas 的替代方案。在处理海量数据时,还可以考虑流式或异步响应以避免内存问题。

以上是如何优化 FastAPI 中大型数据集的 JSON 响应时间?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热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

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

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

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

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何在使用 Fiddler Everywhere 进行中间人读取时避免被浏览器检测到? 如何在使用 Fiddler Everywhere 进行中间人读取时避免被浏览器检测到? Apr 02, 2025 am 07:15 AM

使用FiddlerEverywhere进行中间人读取时如何避免被检测到当你使用FiddlerEverywhere...

在Linux终端中使用python --version命令时如何解决权限问题? 在Linux终端中使用python --version命令时如何解决权限问题? Apr 02, 2025 am 06:36 AM

Linux终端中使用python...

如何在10小时内通过项目和问题驱动的方式教计算机小白编程基础? 如何在10小时内通过项目和问题驱动的方式教计算机小白编程基础? Apr 02, 2025 am 07:18 AM

如何在10小时内教计算机小白编程基础?如果你只有10个小时来教计算机小白一些编程知识,你会选择教些什么�...

如何绕过Investing.com的反爬虫机制获取新闻数据? 如何绕过Investing.com的反爬虫机制获取新闻数据? Apr 02, 2025 am 07:03 AM

攻克Investing.com的反爬虫策略许多人尝试爬取Investing.com(https://cn.investing.com/news/latest-news)的新闻数据时,常常�...

Python 3.6加载pickle文件报错ModuleNotFoundError: No module named '__builtin__'怎么办? Python 3.6加载pickle文件报错ModuleNotFoundError: No module named '__builtin__'怎么办? Apr 02, 2025 am 06:27 AM

Python3.6环境下加载pickle文件报错:ModuleNotFoundError:Nomodulenamed...

使用Scapy爬虫时,管道文件无法写入的原因是什么? 使用Scapy爬虫时,管道文件无法写入的原因是什么? Apr 02, 2025 am 06:45 AM

使用Scapy爬虫时管道文件无法写入的原因探讨在学习和使用Scapy爬虫进行数据持久化存储时,可能会遇到管道文�...

See all articles