在长时间运行的Python进程中迭代大型数据集 – 内存问题?
作者:互联网
我正在研究一个长期运行的Python程序(其中一部分是Flask API,另一部分是实时数据获取程序).
我的长时间运行过程经常(大多数情况下,API可能每秒数百次)迭代大数据集(第二次观察某些经济系列,例如1-5MB的数据甚至更多).它们还在系列之间进行插值,比较和计算等.
为了保持我的进程存活,我可以在迭代/传递参数/处理这些大数据集时练习什么技术?例如,我应该使用gc模块并手动收集吗?
UPDATE
我原来是一名C/C++开发人员,在C中编写部件没有问题(甚至会喜欢).我只是有0经验.我该如何开始?
任何意见,将不胜感激.
谢谢!
解决方法:
使用大型数据集不一定会导致内存复杂化.只要在查看和操作数据时使用声音方法,通常就可以节省使用内存.
在构建处理数据的模型时,需要考虑两个概念.
>您的数据需要访问的最小元素是什么才能执行给定的计算?例如,您可能有一个300GB的文本文件,其中包含数字.如果您要计算数字的平均值,请一次读取一个数字来计算运行平均值.在此示例中,最小元素是文件中的单个数字,因为这是我们需要在任何时间点考虑的数据集的唯一元素.
>您如何为应用程序建模,以便在计算过程中一次一个地迭代访问这些元素?在我们的示例中,我们不是一次读取整个文件,而是一次从文件中读取一个数字.使用这种方法,我们使用少量内存,但可以处理任意大的数据集.不要在内存中传递对数据集的引用,而是传递数据集的视图,该数据集知道如何根据需要从中加载特定元素(一旦使用就可以释放).这在原理上类似于缓冲,并且是许多迭代器采用的方法(例如,xrange,open的文件对象等).
一般来说,诀窍是理解如何将问题分解成微小的,恒定大小的碎片,然后将这些碎片一个接一个地拼接在一起以计算结果.您会发现这些数据处理租户与构建支持大规模并行性的应用程序齐头并进.
望着gc正在跳枪.您只提供了关于您正在处理的内容的高级描述,但是从您所说的内容来看,您还没有理由在内存管理方面进行复杂化.根据您正在进行的分析类型,考虑调查numpy,旨在减轻繁重的统计分析负担.
标签:python,memory,large-data 来源: https://codeday.me/bug/20190709/1415073.html