Python列表实现和pympler度量
我需要解析文件(~500 Mb)并将其部分加载到Python列表实现和pympler度量,python,list,memory,size,Python,List,Memory,Size,我需要解析文件(~500 Mb)并将其部分加载到列表,我不需要整个文件 我有一种感觉,python为列表分配了更多的内存,而它包含的数据的大小是如此之大 我试图使用asizeofofpympler来估计超额杀伤力,但是它在MemoryError中失败,这对我来说很奇怪,我想如果我在内存asizeof中有一个list的话,应该只计算所有实体的大小之和,然后计算它 然后我拿了初始文件的一大块,我被asizeof显示给我的列表的大小震惊了。列表大小是文件大小的三倍 问题是如果asizeof给出的大小是
列表
,我不需要整个文件
我有一种感觉,python为列表
分配了更多的内存,而它包含的数据的大小是如此之大
我试图使用asizeof
ofpympler
来估计超额杀伤力,但是它在MemoryError
中失败,这对我来说很奇怪,我想如果我在内存asizeof
中有一个list
的话,应该只计算所有实体的大小之和,然后计算它
然后我拿了初始文件的一大块,我被asizeof
显示给我的列表的大小震惊了。列表大小是文件大小的三倍
问题是如果
asizeof
给出的大小是正确的,那么在python中使用list的更有效的方法是什么。当asizeof
使用memoryerror失败时,如何检查较大列表的大小。查看用于读取/解析文件的代码以及调用pympler.asizeof
的方式会很有帮助
asizeof
和Pympler中的所有其他工具都在分析的流程中工作(使用Python的内省工具来导航参考图)。这意味着,在调整具有大量节点(对象)的引用图的大小时,分析开销可能会成为一个问题,尤其是在开始分析之前内存已经很紧张的情况下。在调用时,确保设置all=False
和code=False
。无论如何,请。在这种情况下,也许可以避免内存耗尽
据我所知,asizeof
报告的大小是准确的,只要sys.getsizeof
返回单个对象的正确大小(假设Python>=2.6)。您可以在调用asizeof时设置align=1
,查看数字是否更符合您的预期
您还可以通过平台的工具或:
调整对象大小时,此指标应始终高于asizeof报告的内容。什么内容列表?如果它是基于行的,只需迭代打开的文件对象,而不是加载所有行……您实际需要如何处理该文件?如果一次只需要一行,请迭代该文件。如果行较短,则会导致文件行列表比文件本身大得多,但这应该通过不立即加载大部分文件来解决。@wim,我希望我可以迭代,我需要内存中文件的数据,我认为~500Mb不是非常大的文件“我需要内存中文件的数据”-是的,但是你需要用它做什么?@user2357112,计算发生次数和共发生次数,在计算的基础上对数据做更多的处理
from pympler.process import ProcessMemoryInfo
pmi = ProcessMemoryInfo()
print ("Process virtual size [Byte]: " + str(pmi.vsz))