Надеюсь, ты поможешь мне с этим. Когда я запускаю код без 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. У меня недостаточно опыта для решения этой проблемы = (вы можете мне помочь?