2011-04-12 69 views
3

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

我测量出产生一个线程会消耗8M内存,几乎和全新的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%运行全新的独立流程!

现在是不是只是,错了?

+8

任何人都无法回答这个问题,除非你给我们一些你想要做什么和怎么做的想法。码?使用示例?输入数据? – jathanism 2011-04-12 14:16:35

+1

请参阅http://stackoverflow.com/questions/110259/python-memory-profiler – 2011-04-12 14:17:43

+0

哪个操作系统? – vartec 2011-04-12 14:18:39

回答

10

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

请注意,8MB仅仅是一个地址空间块,它被放在一边,开始时只有很少的内存空间。额外的内存在需要时被提交到堆栈,高达8MB的限制。

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

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

+1

谢谢,你刚刚拯救了我的生命@Guido抱歉,我将在下一个问题上赞美python。 – Ron 2011-04-12 15:48:18

相关问题