Задать вопрос
@Eva05

Как заставить модуль multiprocessing работать на IPython?

Доброго времени суток!
Работаю в IPython ,имеется код
from multiprocessing import Pool
import multiprocessing
def job(num):
    return num * 2
if __name__=='__main__':
    p=Pool(processes=20)
    data=p.map(job,range(20))
    p.close()
    print(data)

Вместо того чтобы в интерактивной среде выдать значения умноженные на два , окно просто подвисает и ничего не делает.
Даже не сообщает о наличии каких то ошибок.
Так же не работают и провисают примеры из официальной документации
Подскажите ,в чем проблема и как заставить код все таки исполнять функцию и выводить значения на экран.
Спасибо!
  • Вопрос задан
  • 522 просмотра
Подписаться 2 Оценить Комментировать
Решения вопроса 1
nikolay_karelin
@nikolay_karelin
Ведущий разработчик, пишу на Python, Tcl, Matlab
К сожалению, вопрос ваш не совсем полон...

Что значит "Работаю в IPython"? Это notebook, или консоль, какая? Какие версии всего софта (Python, IPython / Jupyter)? Операционная система?

Я попробовал запустить ваш пример в Qt-консоли, и при этом у меня оставалось открытое окно системной консоли (DOS Prompt на Windows 8), и в системное окно вывалился длинный стектрейс с вот таким вот финалом:
File "C:\Anaconda3\lib\multiprocessing\queues.py", line 345, in get
    return _ForkingPickler.loads(res)
AttributeError: Can't get attribute 'job' on <module '__main__' (built-in)>

и действительно, IPython завис.

Причем рестарт ядра не проходит. Советую еще поисследовать и почитать, как использовать Pool. И, возможно, здесь какой-то баг в IPython.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы