1
我一段代碼縮小到以下最低(工作?)例如:python的多處理會泄漏內存嗎?
import multiprocessing
def f(x): return x**2
for n in xrange(2000):
P = multiprocessing.Pool()
sol = list(P.imap(f, range(20)))
當我在我的電腦上運行此(Ubuntu的12.04,8核),蟒蛇進入到消耗所有可用內存,並最終由於交換無響應而掛起系統。我聽說Python在完成之前不會釋放內存,但我認爲這個程序應該消耗超過8Gb的RAM有點愚蠢。如果我想一遍又一遍地創建multiprocessing.Pool
對象,那麼如何在不重新分配新內存的情況下這樣做?
您正試圖啓動2000個進程池,每個進程池有8個工作者。 這就是16k個流程......對所有資源耗盡並不感到驚訝。 –
另外,Python使用引用計數和垃圾回收來處理內存......絕對不是:「直到完成才釋放內存」 –
我有點驚訝於內存是問題而不是其他一些資源,因爲linux CoW分叉,所以一個forkbomb可以在調度器或其他內核資源淹沒之前淹沒... – abarnert