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