Python多处理RAM的使用

时间:2018-08-26 16:16:04

标签: python multiprocessing ram

我正在尝试使用Spacy的相似度函数来衡量1万对文档之间的相似度。

但是,由于每个文档都很大,因此每个相似度计算都需要很长时间。因此,我正在考虑使用多处理模块,雇用了2名以上的工人。

我的问题是将同时使用N个进程,是否需要N倍以上的RAM使用率?如果可以,那么有什么办法可以使这N个处理器使用RAM中加载的相同(?)SPACY模块?

根据我的观察,我的环境(16GB RAM)不能同时执行2个(多)处理器(当用单个处理器执行脚本时大约为5GB)。

以下是我的代码的缩写版本:

import multiprocessing
import os
from difflib import SequenceMatcher
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.metrics.pairwise import cosine_similarity
import spacy
import logging
import pickle
import datetime
from datetime import date

def measure_similarity(doc_pairs_queue, results_queue):
    code that measure sim using spacy and other modules

def load_files(doc_pairs, loaded_pairs_queue):
    code that loads files
if __name__ == "__main__":
    doc_pairs = pickle.load (~~~)
    loaded_pairs_queue = multiprocessing.Queue(maxsize=100)
    loader = multiprocessing.Process(target=load_files, args=(doc_pairs, loaded_pairs_queue))
    loader.start()
    results_queue = multiprocessing.Queue(maxsize=1000)
    worker_count = N
    workers = []  # create list of workers, so we can terminate them later
    for i in range(worker_count):
        worker = multiprocessing.Process(target=measure_similarity, args=(loaded_pairs_queue, results_queue))
        worker.start()
        workers.append(worker)
    while some_index < len(doc_pairs):
        res = results_queue.get(timeout = 600)

0 个答案:

没有答案