【发布时间】:2019-02-24 17:32:57
【问题描述】:
上下文
我的小型 Python 脚本使用一个库来处理一些相对较大的数据。此任务的标准算法是动态规划算法,因此可能“幕后”库分配了一个大数组来跟踪 DP 的部分结果。事实上,当我尝试给它相当大的输入时,它会立即给出MemoryError。
最好不深入库的深度,我想弄清楚是否值得在具有更多内存的不同机器上尝试此算法,或者尝试减少我的输入大小,或者它是否丢失导致我尝试使用的数据大小。
问题
当我的 Python 代码抛出 MemoryError 时,我是否有一种“自上而下”的方式来调查我的代码尝试分配导致错误的内存大小,例如通过检查错误对象?
【问题讨论】:
-
这是对 MemoryError: airbrake.io/blog/python-exception-handling/memoryerror 的一个很好的概述。您使用的 DP 库是什么?超大输入的大小是多少?与博客文章中的强制越界类似,您可以尝试循环遍历并根据 N 分配内存,然后将其丢弃,直到失败。这会告诉你 N 在哪里发生故障。至于您的直接问题,“如何调查我的代码尝试分配导致错误的内存大小”,我没有立即看到任何明显的东西。有趣的问题!
-
@ScottSkiles,此时我的实际问题或多或少已通过近似/概率解决方案得到解决,这只是我对 Python 中错误对象的好奇。上下文只是为了弄清楚为什么人们可能会关心这个问题,并且大多与实际问题分开。该算法用于计算近似子字符串匹配的 Levenshtein 距离的变体,我的数据(如果我没记错的话)大约有一百万个字符。
-
从@ScottSkiles 引用的文章看来,您似乎可以在错误处理中使用
psutil.virtual_memory()来获取您正在寻找的内存使用数据。也就是说,我不知道根据您的问题从错误本身获取此信息的方法。 -
@ScottSkiles @benvc 如果你们中的任何一个愿意将关于
psutil的事实转化为答案,我很乐意接受并奖励赏金。 -
@benvc 继续。我正在旅行。
标签: python python-3.x error-handling out-of-memory