Можете ли вы помочь мне решить код Multiprocessing pool.map, который работает медленнее, чем для l oop? - PullRequest
0 голосов
/ 27 мая 2020

Надеюсь, ты поможешь мне с этим. Когда я запускаю код без pool.map (используя a для l oop), для завершения sh требуется 1 минута. Когда я использую многопроцессорность, запускается гораздо больше времени (+10 мин).

Вот мой код:

from multiprocessing import set_start_method
if __name__ == "__main__":
    set_start_method("fork")
import time
import spacy
import warnings
import operator
from multiprocessing import Pool
from functools import partial
from tqdm import tqdm

warnings.filterwarnings("ignore")
nlp =spacy.load("en_core_web_lg")

def get_paralel_similarity(tup):
    start_time = time.time()
    simi = tup[0].similarity(tup[1])
    print("--- %s seconds ---" % (time.time() - start_time))
    return simi

class Matcher(object):
    def __init__(self,**kwargs):
        self.word = kwargs.get('word')
        self.word_list = kwargs.get('word_list')
        self.n = kwargs.get('n')
        self.nlp = kwargs.get('nlp')

    def get_top_similarities(self):
        pool = Pool(processes=3)  
        similarities = {}
        doc1 = nlp(str(self.word))
        tup_list = []
        for i in tqdm(self.word_list):
            tup_list.append((doc1,i))

        start_time = time.time()
        similarities = pool.map(get_paralel_similarity, tup_list, chunksize=1)
        pool.close()
        pool.join()
        print("--- %s seconds ---" % (time.time() - start_time))
        simi = {}
        for i in tqdm(range(len(self.word_list))):
            simi[self.word_list[i]] = similarities[i]
        return sorted(simi.items(),key=operator.itemgetter(1),reverse=True)[:self.n]


Вы можете видеть это внутри get_paralel_similarity function Я установил счетчик времени, чтобы убедиться, что функция не занимает слишком много времени. Вот результат времени для первых циклов:

--- 0,006403207778930664 секунды ---
--- 0,0009992122650146484 секунды ---
--- 0,0023641586303710938 секунд ---
- - 0,0009829998016357422 секунд ---
--- 0,002744913101196289 секунд ---
--- 0,0017001628875732422 секунд ---
--- 0,0020089149475097656 секунд ---
--- 0,0035719871520996094 секунд - -

Это означает, что проблема в многопроцессорном режиме pool.map. У меня недостаточно опыта для решения этой проблемы = (вы можете мне помочь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...