python multiprocessing 耗內存問題


multiprocessing在每創建一個進程時,會將主進程的內存空間原封不動的復制一份到子進程,這樣一來內存消耗很容易就翻幾倍,導致程序無法運行。

究其原因,是啟動進程時采用了os.fork(),使子進程繼承父進程全部資源

那么如何解決呢?

1. 最有效的方法:創建完進程后,再加載大內存變量

import multiprocessing
from multiprocessing import Process, Pool, Queue

import numpy as np

# 先創建進程池,只復制當前資源
p = Pool(16)
m = multiprocessing.Manager()
q = m.JoinableQueue()

# 加載大內存變量
larg_mem = np.random.normal(1.0, 0.1, 10000000)

# 啟動子進程
for i in range(100):
  p.apply_async(process, args=(i, ))

p.close()
p.join()

2. 共享內存

3. python3可以指定啟動方式

multiprocessing.set_start_method('spawn')

子進程將只繼承運行run()方法所需的資源。缺點是啟動慢

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM