【发布时间】:2017-11-09 23:58:12
【问题描述】:
我有以下问题。
我的目的是处理一堆文档(将所有单词转换为正常形式,例如'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,我有同样的问题
标签: python-2.7 memory parallel-processing pool joblib