簡體   English   中英

帶有想法的頂篷的Python多處理內存泄漏?

[英]Python multiprocessing memory leak with enthought canopy?

def print_square(i):
    print str(i*i)

from multiprocessing import Pool
p = Pool(1)
for i in range(10):
    p.apply_async(print_square, args=(i,))
p.close()
p.join()

在Windows 8上使用python 2.7上的64位機蓋生成無限進程並使我的機器崩潰。 為什么?

在Windows上,由於沒有派生,所以多處理會產生一個新進程,運行python並導入調用模塊。

如果導入調用模塊本身會產生一個新進程,那么您將自己分叉炸彈。 為了防止這種情況的發生,請在代碼中放入產生新進程的代碼

if __name__ == '__main__':

這是可行的,因為導入模塊時不會執行if-statement代碼。

文檔中對此有警告。 請參閱標題為“ 安全導入主模塊”的部分


所以用

from multiprocessing import Pool


def print_square(i):
    print str(i * i)

if __name__ == '__main__':
    p = Pool(1)
    for i in range(10):
        p.apply_async(print_square, args=(i,))
    p.close()
    p.join()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM