gpt4 book ai didi

python - 在长时间运行的 Python 进程中迭代大型数据集 - 内存问题?

转载 作者:太空宇宙 更新时间:2023-11-03 11:55:43 25 4
gpt4 key购买 nike

我正在开发一个长时间运行的 Python 程序(其中一部分是 Flask API,另一个是实时数据 getter )。

我的两个长期运行的进程都经常迭代(API 甚至可能每秒执行数百次)大型数据集(对某些经济系列的逐秒观察,例如 1-5MB 的数据,甚至更多的)。他们还在系列之间进行插值、比较和计算等。

在迭代/作为参数传递/处理这些大型数据集时,为了让我的流程保持活力,我可以练习哪些技术?例如,我应该使用 gc 模块并手动收集吗?

更新

我最初是一名 C/C++ 开发人员,不会有任何问题(甚至会喜欢)用 C++ 编写部分内容。我只是有 0 次这样做的经验。我该如何开始?

如有任何建议,我们将不胜感激。谢谢!

最佳答案

处理大型数据集不一定会导致内存复杂化。只要您在查看和操作数据时使用合理的方法,通常就可以节省内存。

在构建处理数据的模型时,您需要考虑两个概念。

  1. 执行给定计算需要访问的最小数据元素是什么?例如,您可能有一个 300GB 的文本文件,其中填充了数字。如果您要计算数字的平均值,请一次读取一个数字以计算运行平均值。在此示例中,最小的元素是文件中的单个数字,因为这是我们在任何时间点需要考虑的数据集的唯一元素。

  2. 如何对您的应用程序建模,以便您在计算期间迭代访问这些元素,一次访问一个元素?在我们的示例中,我们不是一次读取整个文件,而是一次从文件中读取一个数字。使用这种方法,我们使用少量内存,但可以处理任意大的数据集。不是在内存中传递对数据集的引用,而是传递数据集的 View ,它知道如何按需从中加载特定元素(使用后可以释放)。这在原理上类似于缓冲,并且是许多迭代器采用的方法(例如,xrangeopen 的文件对象等)。

一般来说,诀窍是了解如何将您的问题分解成微小的、大小不变的部分,然后将这些部分一个接一个地拼接在一起以计算结果。您会发现这些数据处理租户与构建支持大规模并行性的应用程序密切相关。

看向 gc 就是抢先一步。您只提供了您正在处理的内容的高级描述,但从您所说的来看,您还没有理由需要通过在内存管理中四处探索来使事情复杂化。根据您正在进行的分析类型,考虑研究旨在减轻繁重统计分析负担的 numpy

关于python - 在长时间运行的 Python 进程中迭代大型数据集 - 内存问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10891589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com