Многопроцессорность Python: нет вывода с while-loop в рабочей функции

Я изучаю модуль многопроцессорности Python и не понимаю, почему следующий код ничего не печатает. Без цикла while программа печатает Worker_1, как ожидалось.

import multiprocessing, time def worker1(): print 'Worker_1' while 1: print 'Worker_1' time.sleep(3) return if __name__ == '__main__': jobs = [] p = multiprocessing.Process(target=worker1) jobs.append(p) p.start() 

В моей системе (Python 2.6 и 2.7 на Linux) это работает так, как ожидалось. Какую платформу вы используете? На некоторых платформах (Windows) fork нужно эмулировать, создав совершенно новый процесс и настроив его. Я подозреваю, что некоторые stdout не передаются дочернему процессу. Пытаться:

  • Модуль резьбонарезания . Достаточно, если вы просто хотите подождать события в потоке.
  • Запуск вашей программы на POSIX-совместимой платформе, такой как BSD, Linux или Solaris
  • Вывод в файл

Вы используете IDLE? Я думаю, что это проблема. Код, который у вас есть, работает для меня в Linux при вызове из командной строки (он печатает «Worker_1» каждые 3 секунды). Когда я пробую его в IDLE, он немедленно останавливается. Это связано с тем, что у вас нет p.join() что приводит к остановке основного процесса, который затем останавливает рабочий процесс. По-видимому, p.join() не так необходим из командной строки в Linux, хотя я бы порекомендовал его в любом случае.

Однако даже с p.join() и с использованием IDLE скрипт просто сидит там, и мы не видим никакого текста. Это, я думаю, из-за странного способа, которым IDLE перенаправляет stdout на idlelib.rpc.RPCProxy. Таким образом, другими словами, если вы используете IDLE, то это ваша проблема.