Python进程增加了内存RAM的使用

时间:2015-08-12 15:30:45

标签: python-2.7 python-3.x ipython-notebook ram python-idle

我已经使用python几个月了,这个问题刚出现在两三天前。 此时我在IDLE 3.4.3 python GUI中运行此代码:

x = [1,2,3,4,5]

for i in x:
   x.append((i * (i + 1))/2)

print(x)

但这没有输出或错误(不是唯一的),控制台刚刚打开并等待(就像思考) 然后我检查任务管理员的过程,我看到过程开始于30-35 mb 过了一两分钟后,这个过程正在消耗:

Problem images

我没有安装新的软件或操作系统的东西,这发生在两个不同的笔记本电脑(W7和W10),可能是这个代码,我知道(如果我创建一个新的空列表它的作品)但是其他简单的呢?像 1 + 1 这样的说明 我尝试过不同的IDE和python版本,包括架构。 首先我使用的是iPython笔记本和Spyder,因为我需要绘制并且Anaconda随附一切,但内核总是说Busy并没有输出;我重新启动,中断,新内核但是没有工作,这只发生在本周,因为我工作得很好,所以我不得不将其删除,因为这种情况正在发生。

有人知道发生了什么事吗?

1 个答案:

答案 0 :(得分:3)

要查看正在发生的事情,请稍微修改您的代码

x = [1,2,3,4,5]

for i in x:
    x.append((i * (i + 1))/2)
    print(x)
    if len(x) > 20:
        break

print(x)

输出看起来像这样

[1, 2, 3, 4, 5, 1.0]
[1, 2, 3, 4, 5, 1.0, 3.0]
[1, 2, 3, 4, 5, 1.0, 3.0, 6.0]
[1, 2, 3, 4, 5, 1.0, 3.0, 6.0, 10.0]
[1, 2, 3, 4, 5, 1.0, 3.0, 6.0, 10.0, 15.0]
[1, 2, 3, 4, 5, 1.0, 3.0, 6.0, 10.0, 15.0, 1.0]
[1, 2, 3, 4, 5, 1.0, 3.0, 6.0, 10.0, 15.0, 1.0, 6.0]
[1, 2, 3, 4, 5, 1.0, 3.0, 6.0, 10.0, 15.0, 1.0, 6.0, 21.0]
[1, 2, 3, 4, 5, 1.0, 3.0, 6.0, 10.0, 15.0, 1.0, 6.0, 21.0, 55.0]
[1, 2, 3, 4, 5, 1.0, 3.0, 6.0, 10.0, 15.0, 1.0, 6.0, 21.0, 55.0, 120.0]
[1, 2, 3, 4, 5, 1.0, 3.0, 6.0, 10.0, 15.0, 1.0, 6.0, 21.0, 55.0, 120.0, 1.0]
[1, 2, 3, 4, 5, 1.0, 3.0, 6.0, 10.0, 15.0, 1.0, 6.0, 21.0, 55.0, 120.0, 1.0, 21.0]
[1, 2, 3, 4, 5, 1.0, 3.0, 6.0, 10.0, 15.0, 1.0, 6.0, 21.0, 55.0, 120.0, 1.0, 21.0, 231.0]
[1, 2, 3, 4, 5, 1.0, 3.0, 6.0, 10.0, 15.0, 1.0, 6.0, 21.0, 55.0, 120.0, 1.0, 21.0, 231.0, 1540.0]
[1, 2, 3, 4, 5, 1.0, 3.0, 6.0, 10.0, 15.0, 1.0, 6.0, 21.0, 55.0, 120.0, 1.0, 21.0, 231.0, 1540.0, 7260.0]
[1, 2, 3, 4, 5, 1.0, 3.0, 6.0, 10.0, 15.0, 1.0, 6.0, 21.0, 55.0, 120.0, 1.0, 21.0, 231.0, 1540.0, 7260.0, 1.0]

append只是在列表末尾添加一个新值,所以你所做的就是创建一个无限循环,其中x只会变得越来越大。基本上每次迭代器从x中抽取一个数字时,都会在x的末尾添加一个新数字,因此迭代器在完成之前总会有5个数字要绘制。

随着迭代器的不断运行,x不断变得越来越大,消耗的内存越来越多。

要修复此无限循环,您可以将结果存储在不同的列表中,或者如果您真的希望将结果附加到break,则可以使用上面使用的x条件。此外,如果您要替换x中的值,则可以执行此类操作

x = [1,2,3,4,5]

for i, v in enumerate(x):
    x[i] = (v * (v + 1))/2

print(x)

输出

[1.0, 3.0, 6.0, 10.0, 15.0]

希望有所帮助。