python-2.7 - Joblib 内存使用量不断增长

标签 python-2.7 memory parallel-processing pool joblib

我有以下问题。
我的目的是处理一堆文档(将所有单词转换为正常形式,例如 '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) 

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

有没有办法解决问题?当然,主要问题是,为什么会发生这种情况?

谢谢!

附言文档非常小,并且在没有并行性的情况下运行时,进程消耗的内存非常少。

最佳答案

似乎这个内存泄漏问题已在最新版本的 Joblib 上得到解决。

他们引入了 loky 后端作为内存泄漏保护措施。

Parallel(n_jobs=10, backend='loky')(delayed(process_and_save)(doc_id) for doc_id in all_doc_ids)

来源:Memory Release after parallel

关于python-2.7 - Joblib 内存使用量不断增长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44432840/

相关文章:

c - 理解内存中的乱码(C)

Python列表输入错误

c# - 如何将纯文本命令发送到在具有脚本引擎的 win7 上运行的 c# 类?

python - 我需要更改当前数据框的格式。我应该怎么做?

c++ - 关于核心数的并行化限制

python - 给定 N 个生成器,是否可以创建一个在并行进程中运行它们并生成这些生成器的 zip 的生成器?

algorithm - 如何将此顺序迭代二进制搜索转换为并行算法?

python - Groupby 求和并计算 python 中的多列

c - malloc(-1) 返回 NULL 但 malloc(0) 不返回,为什么?你怎么能分配0内存空间

c++ - 如何将以下线程模型从 C++ 转换为 go?