Joblib内存使用量不断增长

问题描述 投票:4回答:1

我有以下问题。我的目的是处理一堆文档(将所有单词恢复为正常形式,例如'was'->'be','were'->'be','went'->'go')。这意味着,我需要打开目录中的每个文件,更改其内容并将其保存在另一个目录中。由于该过程很耗时,因此我决定在joblib的帮助下进行并行处理。下面的代码可以正常工作(我的意思是,它可以执行所需的工作),但是我在内存方面面临着巨大的问题。它不断增长!它会一直增长,直到服务器上完全没有内存为止。

from joblib import delayed, Parallel

def process_text(text):
    # some function which processes
    # text and returns a new text
    return processed_text


def process_and_save(document_id):
    with open(path + document_id) as f:
        text = f.read()
    text = process_text(text)
    f = open(other_path + document_id, 'w')
    f.write(text)
    f.close()

all_doc_ids = # a list of document ids which I need to process

Parallel(n_jobs=10)(delayed(process_and_save)(doc_id) for doc_id in all_doc_ids)

我也试图将joblib更改为multipricessing:

pool = Pool(10)
pool.map(process_and_save, all_doc_ids) 

但是事实证明情况完全一样。

有没有解决问题的方法?而且,当然,主要的问题是,为什么这甚至会发生?

谢谢!

P.S。这些文档非常小,并且在没有并行度的情况下运行时该进程将占用很少的内存。

python-2.7 memory parallel-processing pool joblib
1个回答
0
投票

[并行处理所有文档时,每个线程都将整个文件加载到内存中,因为read()从内存中的整个文件创建了一个字符串。

© www.soinside.com 2019 - 2024. All rights reserved.