[英]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.