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()方法所需的资源。缺点是启动慢

原文地址:https://www.cnblogs.com/estragon/p/12377767.html