Многопроцессорный переход занимает ~ 25 секунд .. почему? - PullRequest
0 голосов
/ 04 мая 2020

Я использую многопроцессорность в своей программе парсинга Python для оптимизации скорости. Однако для запуска этой программы требуется 30 секунд c, поэтому я заглянул «под капот» и обнаружил, что фактические процессы занимают всего 4,5 секунды c. Таким образом, переход от 1 ядра к 5 ядрам занимает 25 сек. c?

mp_start_time = time.time()
with mp.Pool() as pool:
    output = pool.map(
        self.parallel_process,
        [(
           link, 
           question, 
           25,
           crawler.webcrawler, 
           self.translator, 
        ) for link in links]
    )
print('Multiprocesses time:', time.time() - mp_start_time)

Многопроцессорная функция

def parallel_process(self, inputs):
    # Inputs: Must be a dict of all inputs cuz multiprocessing only allows one input
    mli_start_time = time.time()
    # Variables
    link = inputs[0]
    question = inputs[1]
    n_sentences = inputs[2]

    # Modules
    webcrawler = inputs[3]
    translator = inputs[4]
    question_answering = inputs[5]
    print('ml init time',time.time() - mli_start_time)

    # Crawl the website
    # Question is used to rank the sentences
    wc_start_time = time.time()
    webdata = webcrawler(link, question, n_sentences)
    print('crawler time:', time.time() - wc_start_time)

    # Translate into English so our ML engine understands the text
    # Automatically detect language and translates into english
    webdata_english = translator.translate(webdata, dest='en').text


    return webdata_english

Так ли это на самом деле или происходит что-то еще, и как Починить?

1 Ответ

0 голосов
/ 27 мая 2020

Я не решил эту проблему, но, вероятно, причина в том, что один из аргументов, которые я передал, был ОГРОМНЫМ ... аргументом был класс предсказания ML. В итоге я просто сделал это линейно со стандартом l oop.

...