Я узнал о библиотеке многопроцессорности 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
Отпечаток команда, кажется, блокируются до тех пор, многопроцессорные не завершится, даже если они происходят в начале кода. Почему это? Запуск из командного окна дает ожидаемый результат (подсчет после разрыва).
Невозможно воспроизвести на Windows 7 Python 3; счетчики печатаются после перерыва. –
Вероятно, буферизация stdout. Попробуйте вызвать 'sys.stdout.flush()' перед запуском многопроцессорного кода. –
Невозможно воспроизвести на OS X с Python 2.7 –