我有一个使用python多处理池的代码。但是它使用了过多的内存。我已经测试了pool.map和pool.imap_unordered,但是,它们都使用了相同的内存量。下面是我的代码的简化版本。
import random, time, multiprocessing
def func(arg):
y = arg**arg # Don't look into here because my original function is
# much complicated and I can't change anything here.
print y
p = multiprocessing.Pool(24)
count = 0
start = time.time()
for res in p.imap_unordered(func, range(48000), chunksize=2):
#for res in p.map(func, range(48000), chunksize=2):
print "[%5.2f] res:%s count:%s"%(time.time()-start, res, count)
count += 1
该函数将输出保存在文件中,并且没有任何return语句。上面的代码是: p.map:使用的CPU:03:18:31,作业挂钟时间:00:08:17,使用的内存:162.92 MB p.imap_unordered:CPU使用率:04:00:13,作业挂钟时间:00:10:02,内存使用率:161.16 MB
我总共有128GB的内存,并且由于内存超出而我的原始代码停止了。 map和imap_unordered都显示相同的问题。我期望imap_unordered占用更少的内存。在不更改func(原始功能)的情况下,我应该进行哪些修改以减少内存消耗?