多处理池中过多的内存使用

时间:2019-01-24 11:21:40

标签: python python-2.7 memory performance-testing python-multiprocessing

我有一个使用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(原始功能)的情况下,我应该进行哪些修改以减少内存消耗?

0 个答案:

没有答案