首页 > 解决方案 > 如何根据可用内存确定批次的大小?

问题描述

我需要读取一个任意大的文件,对其进行解析(这意味着在执行此操作时将一些数据保留在内存中),然后将文件的新版本写入文件系统。鉴于内存限制,我需要增量或分批读取文件。但是,批次越大越好(因为用于解析文件每一行的信息包含在文件的其他行中)。

显然,我可以通过类似的方式获取有关内存使用情况的信息

import psutil
psutil.virtual_memory()

它还以百分比返回可用内存。有关更多信息,请参阅此答案https://stackoverflow.com/a/11615673/3924118

我想根据可用内存和当前 Python 进程使用和保留的内存来确定批次的大小。

显然,我可以得到当前 Python 进程使用的内存

import os
import psutil
process = psutil.Process(os.getpid())
print(process.memory_info().rss)  # in bytes 

有关更多信息,请参阅https://stackoverflow.com/a/21632554/3924118

那么,有没有一种方法可以根据专用于当前 Python 进程的可用内存和系统总可用内存来拥有自适应批量大小(或生成器),这样我就可以读取可用内存允许的尽可能多的行时间,然后读取下一批线等?换句话说,我需要增量读取文件,使得一次读取的行数最大化,同时满足内存限制(在某个阈值内,例如,直到使用 90% 的内存)。

标签: python-3.xpython-2.7memoryio

解决方案


我会一次固定您正在读取的数据的大小,而不是尝试随机填充您的内存。以固定块读取数据。处理起来容易得多。


推荐阅读