我想跳过从 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()
