2016-10-04 2 views
0

Win 7, x64, Python 2.7, Anaconda 4.2.0, 5.1.0 IPythonКонсоль IPython не показывает некоторые выходы, но показывает другие?

Я работаю через некоторые multiprocessing учебники & ударил проблему сразу, работая в консоли IPython. Код ниже ...

import multiprocessing 

print 'hello' 

def worker(): 
    """worker function""" 
    print 'Worker' 
    return 


jobs = [] 
for i in range(5): 
    p = multiprocessing.Process(target=worker) 
    jobs.append(p) 
    p.start() 

Я ожидаю ...

hello 
worker 
worker 
worker 
worker 
worker 

, но я получаю ..

hello 

Почему выход из функции worker не отображается в консоли IPython?

EDIT: При запуске из командной строки Anaconda он выходит с синтаксической ошибкой на линии print 'Worker', но при запуске с консоли Python выполняется, как ожидается, если я буду продолжать нажимать enter.

EDIT 2: теперь работает в командном окне Anaconda (у меня был установлен неправильный Python). Проблема не ограничивается этим кодом. Любой оператор печати в любых параллельных функциях не отображается в консоли IPython.

+1

BTW, SO требует, чтобы текст появлялся на новой строке для двух строк. Используйте форматирование кода, чтобы обойти это. – Carcigenicate

+0

И я подозреваю это, потому что программа заканчивается, прежде чем дать рабочим возможность распечатать. – Carcigenicate

+0

Вы можете протестировать это, не допустить, чтобы программа каким-то образом закончилась, например, запросить пользователя для ввода после запуска заданий. – Carcigenicate

ответ

0

Попробуйте это:

for i in range(5): 
    p = multiprocessing.Process(target=worker) 
    jobs.append(p) 
    p.start() 
    p.join() 

Я подозреваю, что IPython заканчивает дочерние процессы, когда основной процесс/функция выполняется, и join должно помочь предотвратить это.

+0

'join()' не имеет никакого эффекта. Кажется, проблема в консоли IPython не печатает ничего, что находится внутри параллельной функции – DrBwts

Смежные вопросы