2016-02-23 4 views
0

Я узнал о библиотеке многопроцессорности Python и заметил это любопытное поведение. Я использую Windows с Python 2.7 в Atom с пакетом выполнения скриптов Atom Runner. Учитывая этот код:Почему экран IO блокируется до тех пор, пока Process.join()

import multiprocessing 
import time 
def f(name): 
    time.sleep(1) 
    print 'count: ', name 
if __name__ == '__main__': 
    cnt = 0 
    print 'Sleep' 
    time.sleep(1) 
    while 1: 
     p1 = multiprocessing.Process(target=f, args=(cnt,)) 
     p1.start() 
     cnt+=1 
     if cnt==2: 
      print 'break' 
      break 
    p1.join() 

Выход выглядит следующим образом:

count: 0 
count: 1 
Sleep 
break 

Отпечаток команда, кажется, блокируются до тех пор, многопроцессорные не завершится, даже если они происходят в начале кода. Почему это? Запуск из командного окна дает ожидаемый результат (подсчет после разрыва).

+0

Невозможно воспроизвести на Windows 7 Python 3; счетчики печатаются после перерыва. –

+1

Вероятно, буферизация stdout. Попробуйте вызвать 'sys.stdout.flush()' перед запуском многопроцессорного кода. –

+0

Невозможно воспроизвести на OS X с Python 2.7 –

ответ

0

Курт определил проблему. Вызов sys.stdout.flush() перед оператором .join() исправил поведение. Выходной сигнал:

Pool 
Sleep 
break 
count: 1 
count: 0 
Смежные вопросы