Python 3 - 限制脚本中的内存使用

时间:2016-06-13 17:13:13

标签: python python-3.x memory memory-management memory-leaks

我正在使用itertools模块为一个相当长的句子中的字母顺序创建可能的排列列表。但是,每次我这样做都会耗尽内存(在任何人问之前我有16GB内存)。

我没有这台机器上的代码,但是它不是效率低下的代码,因为它是文档中其中一个示例的副本,Python有很多排列,它们试图一次性完成所有这些操作

问题是,有没有办法限制Python使用的内存量,可能是通过给它一个池?我知道我应该更改代码,但我也可以从其他项目的内存池中受益。

我无法使用Theano模块,因为我使用的是不兼容的Conda。我尝试了gc模块效果不大,但是再次,代码是一个例子,句子大约是十几个字符,在屏幕上打印列表。

修改

这是我的代码的主要部分。 我不建议运行它,因为它会导致我的机器崩溃。

import itertools
f = open('File.txt','w')
for key, value in dict.items():
    print(list(itertools.permutations((str(counter-value)))),file=f)

dict变量是一个76元素字典,包含代码检查的不同字符。代码的实际功能很复杂,适合大约一百行的脚本,但这是我遇到问题的重点。如果代码有效,则应该计算数百万个排列。我的问题是它试图一次完成所有这些。我想知道是否有某些方法可以限制它,即使这意味着代码运行速度会变慢。

1 个答案:

答案 0 :(得分:0)

您可以循环遍历排列并将每个排列写入文件,如下所示:

import itertools
f = open('File.txt','w')
for key, value in dict.items():
    for i in itertools.permutations((str(counter-value))):
        print(i, file=f)

由于它是一个生成器,所以逐项检索这些项目,这样你的记忆就不会用尽。