python-3.x - 如何根据可用内存确定批次的大小?
问题描述
我需要读取一个任意大的文件,对其进行解析(这意味着在执行此操作时将一些数据保留在内存中),然后将文件的新版本写入文件系统。鉴于内存限制,我需要增量或分批读取文件。但是,批次越大越好(因为用于解析文件每一行的信息包含在文件的其他行中)。
显然,我可以通过类似的方式获取有关内存使用情况的信息
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 - 如果可能的话,使用切片选择方法批量删除数据框的列?
- c# - C#如何写入文本文件?
- python - 如何在没有完整前向传递的情况下计算深度 CNN 的特征图形状?
- kofax - System.Runtime.InteropServices.COMException:“[24] KdoLib:未知错误。”
- php - 想隐藏“?” 来自 url 但需要来自 url 的密钥
- tsql - 如何使用声明语句更新表
- rabbitmq - 为什么 Android-Things 应用程序在新的 ConnectionFactory 上崩溃
- sql - 在 CTE 查询中,根据检索到的第一个表 ID 计算另一个表中的记录
- python - 从 PyCharm 安装 pandas - 如何应用正确的约定,然后有哪些步骤?
- python - 从 Cosmos DB 查询时延续令牌出现问题