Дочерние процессы, созданные с модулем многопроцессорной обработки Python, не распечатают

У меня есть проблема с кодом ниже, и с любым кодом, который использует print функция в дочерних процессах. Я не вижу письменных заявлений, даже если я использую sys.std[err|out].write('worker') вместо print.

Это - код (из официальной документации Python):

from multiprocessing import Process

def f(name):
    print 'hello', name

if __name__ == '__main__':
    p = Process(target=f, args=('bob',))
    p.start()
    p.join()

Вывод является пробелом.

Примечание: Следующий код использует модуль поточной обработки, и он печатает вывод:

import threading

def f(name):
    print 'hello', name

if __name__ == '__main__':
    p = threading.Thread(target=f, args=('bob',))
    p.start()
    p.join()

Вывод: hello bob

Можно ли указать на меня на решение?Заранее спасибо.

18
задан ρss 11 March 2014 в 20:38
поделиться

2 ответа

Попробуйте так:

from multiprocessing import Process
import sys

def f(name):
    print 'hello', name
    sys.stdout.flush()

...

AFAIK стандартный вывод обработанных процессов, порожденных модулем multiprocessing, буферизован, поэтому вы увидите вывод только тогда, когда буфер станет полным или вы явно промоете sys.stdout.

28
ответ дан 30 November 2019 в 07:22
поделиться

Документация по мультипроцессингу четко объясняет, почему это не будет работать!

"Примечание: Функциональность в рамках этого пакета требует, чтобы метод __main__ был импортируемым для дочерних пакетов. Это описано в руководстве по программированию, однако здесь на это стоит обратить внимание. Это означает, что некоторые примеры, такие как примеры multiprocessing.Pool, не будут работать в интерактивном интерпретаторе."

.
7
ответ дан 30 November 2019 в 07:22
поделиться
Другие вопросы по тегам:

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