首页 > 解决方案 > 多处理池中的内存使用过多

问题描述

我有一个使用 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

该函数将输出保存在文件中,并且没有任何返回语句。上面的代码占用: p.map: CPU Utilized: 03:18:31, Job Wall-clock time: 00:08:17, Memory Utilized: 162.92 MB p.imap_unordered: CPU Utilized: 04:00:13, Job Wall -时钟时间:00:10:02,已使用内存:161.16 MB

我总共有 128GB 的​​内存,我的原始代码由于内存超出而停止。map 和 imap_unordered 都显示相同的问题。我期待 imap_unordered 占用更少的内存。我应该修改什么以减少内存消耗而不改变 func (原来的)?

标签: pythonpython-2.7memoryperformance-testingpython-multiprocessing

解决方案


推荐阅读