Почему у меня зависает карта пула многопроцессорного кода, которую я извлек из предыдущего вопроса? - PullRequest
0 голосов
/ 04 июля 2019

Я взял пример с senderle здесь . Я думал, что скопировал и вставил основные части кода, но мой код не остановится.

Я попробовал этот пример после того, как мои собственные попытки решить другую проблему с помощью pool.map продолжали зависать. Интересно, что-то не так с кодом или моим многопроцессорным пакетом ...

Ниже приведен код, который я извлек из верхнего ответа отправителя:

from itertools import product
import multiprocessing
def merge_names(a, b):
    return '{} & {}'.format(a, b)
names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie']
with multiprocessing.Pool(processes=3) as pool:
    results = pool.starmap(merge_names, product(names, repeat=2))
print(results)

Я ожидал список из 36 «объединенных» имен, но процесс продолжается без конца. Любая помощь?

1 Ответ

0 голосов
/ 04 июля 2019

Прочитав комментарий juanpa.arrivillaga , я посмотрел «многопроцессорная обработка ноутбука jupyter не работает». Сначала ссылка ответила на мой вопрос.

  1. Вы должны добавить if __name__ == '__main__' : на ваш код.

  2. Сохраните функцию как отдельный файл py и импортируйте ее.

    • В моем случае я сохранил merge_names как merge_names.py
    • Тогда мой код выглядит следующим образом:

import multiprocessing from itertools import product import merge_names

if __name__ == '__main__': names = ['Brown', 'Wilson', 'Bartlett', 'Rivera', 'Molloy', 'Opie'] with multiprocessing.Pool(processes=3) as pool: results = pool.starmap(merge_names.merge_names, product(names, repeat=2)) print(results)

Теперь код запускается в Jupyter Notebook.

...