我有以下问题。
我的目的是处理一些文件(将所有单词转换为常规形式,例如'was' --> 'be','were' --> 'be','went' --> 'go')。
这意味着我需要打开目录中的每个文件,更改其内容并将其保存在另一个目录中。
由于该过程耗时,我决定使用joblib并行处理它。 下面的代码可以正常工作(即它执行了它所需执行的操作),但我遇到了一个巨大的内存问题。
它不断增长!
它会增长,直到服务器上的内存完全用尽。
由于该过程耗时,我决定使用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转换为multiprocessing:
pool = Pool(10)
pool.map(process_and_save, all_doc_ids)
然而,情况却完全相同。
有什么办法可以解决这个问题吗?当然,主要问题是,为什么会发生这种情况呢?
谢谢!
P.S. 当不使用并行处理时,这些文档非常小,并且该过程消耗的内存很少。