Python3-限制脚本的内存使用

Python3-限制脚本的内存使用,python,python-3.x,memory,memory-management,memory-leaks,Python,Python 3.x,Memory,Memory Management,Memory Leaks,我正在使用itertools模块为一个较长的句子中的字母顺序创建一个可能的排列列表。但是,每次这样做时,我的内存都会耗尽(在有人问我之前,我有16GB的RAM) 我没有这台机器上的代码,但是它不是低效的代码,因为它是文档中一个示例的复写本,Python试图一次完成的排列太多了 问题是,有没有办法限制Python使用的内存量,比如给它一个池?我知道我可能应该修改代码,但我也会从其他项目的内存池中受益 我不能使用Theano模块,因为我使用的是Conda,这是不兼容的。我尝试了gc模块,但效果甚微,

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


我没有这台机器上的代码,但是它不是低效的代码,因为它是文档中一个示例的复写本,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元素的字典,包含代码检查的不同字符。代码的实际功能很复杂,可以容纳大约100行脚本,但这正是我遇到的问题所在。如果代码有效,它应该是数百万个排列。我的问题是,它试图一次完成所有任务。我想知道是否有某种方法可以限制它,即使这意味着代码运行速度会变慢。

您只需循环排列并将每个排列写入文件,如下所示:

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)

由于它是一个生成器,因此会逐个检索项目,这样您的内存就不会耗尽。

您只需循环排列并将每个排列写入文件,如下所示:

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)

由于它是一个生成器,因此会逐个检索项目,这样您的内存就不会耗尽。

“这不是效率低下的代码,因为它是文档中一个示例的复写本”-这并不能使它成为高效的代码。对于极短的输入,迭代置换永远都是一个好主意。使用一种不会这样做的算法。虽然限制内存使用是可能的,但这只意味着你会很快而不是很晚地使用
MemoryError崩溃。使用
MemoryError
的一般情况可能仍然比在机器上消耗更多RAM更可取。也许我还没有说清楚,我没有碰到任何记忆错误。我在旁边打开了任务管理器,告诉我正在使用的资源,当程序运行时,在整个计算机由于内存不足而冻结之前,图形将达到100%。我知道我的代码效率不高,但我想放慢速度。@Master chip你想让它只打印列表中的元素吗?“这不是低效代码,因为它是文档中一个示例的复写本”-这并不能使它成为高效代码。对于极短的输入,迭代置换永远都是一个好主意。使用一种不会这样做的算法。虽然限制内存使用是可能的,但这只意味着你会很快而不是很晚地使用
MemoryError崩溃。使用
MemoryError
的一般情况可能仍然比在机器上消耗更多RAM更可取。也许我还没有说清楚,我没有碰到任何记忆错误。我在旁边打开了任务管理器,告诉我正在使用的资源,当程序运行时,在整个计算机由于内存不足而冻结之前,图形将达到100%。我知道我的代码效率不高,但我想放慢速度。@Master chip你想让它只打印列表中的元素吗?太好了。谢谢,太好了。非常感谢。