Python 多处理map_async

标签 python asynchronous dictionary multiprocessing

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

相关文章:

python - Google - 目录 API(管理 SDK)创建组 - 错误

node.js - Firebase 云功能不发送异步推送通知

linux - Linux异步IO的状态?

java - FileHashMap <K,V> : Reuse the same hashmap

C++:从键和值 vector 插入 boost::unordered_map

Python 进程在重启后停止响应 SIGTERM/SIGINT

python - 在 python 中使用 zip 函数迭代几列,给出错误

python - 使用请求库发送具有相同键的多个值的 POST 请求

javascript - 如何处理 javascript 中的异步调用 - 使用 promises 延迟打印数字

python - python中的p5-js map()函数