我想跳过从 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 进程的内存会增长到几 GB。我该如何解决这个问题?
感谢您的帮助:)
最佳答案
您的代码有一个错误:
for line in sys.stdin:
lines.append(line)
if len(lines) >= 100000:
pool.map_async(processLine, lines, 2000)
这将等到 lines
累积超过 100000 行。之后,在超过 100000 行的整个列表上对于每个附加行都会调用pool.map_async
。
目前尚不清楚您真正想要做什么,但是
如果您不需要返回值,请使用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()
关于Python 多处理map_async,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13916786/