Skip to main content
 首页 » 编程设计

Python 多处理 map_async

2024年08月29日34birdshome

我想跳过从 map_async 返回的结果.它们在内存中增长,但我不需要它们。

这是一些代码:

def processLine(line): 
    #process something 
    print "result" 
pool = Pool(processes = 8) 
for line in sys.stdin: 
    lines.append(line) 
    if len(lines) >= 100000: 
        pool.map_async(processLine, lines, 2000) 
pool.close() 
pool.join() 

当我必须处理具有数亿行的文件时,python 进程在内存中增长到几千兆字节。我该如何解决?

感谢您的帮助:)

请您参考如下方法:

您的代码有一个错误:

for line in sys.stdin: 
    lines.append(line) 
    if len(lines) >= 100000: 
        pool.map_async(processLine, lines, 2000) 

这要等到 lines 累积超过 100000 行。之后,pool.map_async 将在 100000 多行的整个列表上被调用,每增加一行。

目前还不清楚你到底想做什么,但是 如果您不需要返回值,请使用 pool.apply_async,而不是 pool.map_async。也许是这样的:

import multiprocessing as mp 
 
def processLine(line): 
    #process something 
    print "result" 
 
if __name__ == '__main__': 
    pool = mp.Pool(processes = 8) 
    for line in sys.stdin: 
        pool.apply_async(processLine, args = (line, )) 
    pool.close() 
    pool.join()