2011-04-12 107 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

相關問題