为什么python线程消耗这么多内存?

时间:2011-04-12 14:14:51

标签: python multithreading

为什么python线程消耗这么多内存?

我测量产生一个线程消耗8兆内存,几乎与整个新python进程一样大!

操作系统:Ubuntu 10.10

编辑:由于受欢迎的需求,我将提供一些无关的例子,这里是:

from os import getpid
from time import sleep
from threading import Thread

def nap():
    print 'sleeping child'
    sleep(999999999)

print getpid()
child_thread = Thread(target=nap)
sleep(999999999)

在我的方框中,pmap pid将给出9424K

现在,让我们运行子线程:

from os import getpid
from time import sleep
from threading import Thread

def nap():
    print 'sleeping child'
    sleep(999999999)

print getpid()
child_thread = Thread(target=nap)
child_thread.start()             # <--- ADDED THIS LINE
sleep(999999999)

现在pmap pid将给出17620K

因此,额外线程的成本是17620K - 9424K = 8196K

即。 87%的人正在运行一个全新的独立流程!

现在不仅仅是,错了吗?

1 个答案:

答案 0 :(得分:10)

这不是特定于Python的,而是与操作系统为每个线程分配的单独堆栈有关。操作系统上的默认最大堆栈大小恰好是8MB。

请注意,8MB只是一块地址空间被搁置,最初只有很少的内存。额外内存在需要时提交到堆栈,最高可达8MB。

可以使用ulimit -s调整限制,但在这种情况下,我认为没有理由这样做。

另外,pmap显示地址空间用法。这不是衡量内存使用情况的好方法。如果相关,这两个概念是截然不同的。