Подтвердить что ты не робот

Детские процессы, созданные с помощью модуля многопроцессорности 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

Не могли бы вы указать мне на решение? Спасибо заранее.

4b9b3361

Ответ 1

Попробуйте следующее:

from multiprocessing import Process
import sys

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

...

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

Ответ 2

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

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

Ответ 3

Столкнувшись с этой проблемой сам, иногда это может быть из-за того, что дочерний процесс на самом деле молча завершается сбоем прежде, чем когда-либо попадет в оператор print. В этом случае завершение кода дочернего процесса в блок try-exc и возвращение объекта исключения (который будет напечатан в родительском процессе) является эффективным способом отладки этого.

Ответ 4

Получите PyCharm, я имел ту же ошибку и работал над ней в течение +5 часов. Наконец, я получил Пичарм над Анакондой и получил выход. Это как-то связано с версией Windows интерпретатора IPhython.