回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我的一个脚本中有一个嵌套的循环,运行时会导致<code>MemoryError</code>。它看起来像这样:</p>
<pre><code>jobRange = range(605)
a = []
for i in jobRange:
for k in jobRange:
for j in jobRange:
if i != k and k != j:
a.append((i, k, j))
</code></pre>
<p>我试图通过使用排列替换可怕的嵌套循环来优化它:</p>
<pre><code>a = []
for p in permutations(jobRange, 3):
i, k, j = p[0], p[1], p[2]
a.append((i, k, j))
</code></pre>
<p>然而,这并不能解决问题。我仍然得到:</p>
<pre class="lang-none prettyprint-override"><code>Traceback (most recent call last):
File "C:/Users/Vejdanpa/PycharmProjects/myProject/Models/test.py", line 10, in <module>
a.append((i, k, j))
MemoryError
</code></pre>
<p>我还尝试了以下超慢代码,只是为了找出这段代码使用了多少内存,从而导致<code>MemoryError</code>:</p>
<pre><code>from itertools import permutations
import tracemalloc
tracemalloc.start()
jobRange = range(605)
a = []
for p in permutations(jobRange, 3):
i, k, j = p[0], p[1], p[2]
a.append((i, k, j))
current, peak = tracemalloc.get_traced_memory()
print(f"Current memory usage: {current / 10 ** 6}MB; Peak: {peak / 10 ** 6}MB")
tracemalloc.stop()
</code></pre>
<p>抛出错误之前的最后两行输出是:</p>
<pre class="lang-none prettyprint-override"><code>Current memory usage: 1022.68617MB; Peak: 1022.686298MB
Current memory usage: 1022.68621MB; Peak: 1022.686338MB
Current memory usage: 1022.68625MB; Peak: 1022.686378MB
Current memory usage: 1022.68629MB; Peak: 1022.686418MB
Current memory usage: 1022.68633MB; Peak: 1022.686458MB
Current memory usage: 1022.68637MB; Peak: 1022.686498MB
Current memory usage: 1022.68641MB; Peak: 1022.686538MB
Current memory usage: 1022.68645MB; Peak: 1022.686578MB
Current memory usage: 1022.68649MB; Peak: 1022.686618MB
Current memory usage: 1022.68653MB; Peak: 1022.686658MB
Traceback (most recent call last):
File "C:/Users/Vejdanpa/PycharmProjects/myProject/Models/test.py", line 10, in <module>
a.append((i, k, j))
MemoryError
Process finished with exit code 1
</code></pre>
<p>据我所知,这表明阈值以某种方式设置为~1GB,我的程序内存不足,因为它需要更多的1GB。我检查了我的机器的规格:
<a href="https://i.stack.imgur.com/bCcVe.png" rel="nofollow noreferrer">machine specs</a>。这表明我有16GB的ram,据我所知,Python并没有以任何方式限制内存的使用,应该一直运行到内存耗尽为止</p>
<p>我目前正在PyCharm中运行Python3.7中的代码,但在命令行上进行一次简单的尝试就得到了相同的结果</p>
<p>有人能帮助我理解为什么我的python脚本可以使用1GB的内存限制,以及如何增加这种限制吗</p>