почему процесс не объединяется и не запускается?

У меня есть простая проблема для решения (более или менее)
если я смотрю руководства по многопроцессорной обработке python, я вижу, что процесс нужно начинать более или менее следующим образом:

from multiprocessing import * def u(m): print(m) return A=Process(target=u,args=(0,)) A.start() A.join() 

Он должен печатать 0, но ничего не печатается. Вместо этого он вечно вешает на A.join() .

если я вручную запустил функцию u, выполняя это

 A.run() 

он на самом деле печатает 0 на оболочке, но он не работает одновременно
например, вывод следующего кода:

 from multiprocessing import * from time import sleep def u(m): sleep(1) print(m) return A=Process(target=u,args=(1,)) A.start() print(0) 

должно быть
0
1

но на самом деле
0

и если я добавляю до последней строки

 A.run() 

то выход будет
1
0

это кажется мне непонятным …

и если я попытаюсь присоединиться к процессу, он ждет навсегда.

однако, если это поможет мне дать ответ
моя ОС – Mac os x 10.6.8
Используемые версии python: 3.1 и 3.3
мой компьютер имеет 1 процессор Intel i3

–Обновить–
Я заметил, что это странное поведение присутствует только при запуске программы из IDLE, если я запускаю программу с терминала, все работает так, как предполагается, поэтому эта проблема должна быть связана с некоторой ошибкой IDLE.
Но программы runnung с терминала еще более странные: использование чего-то вроде диапазона (100000000) активирует весь барабан моего компьютера до конца программы; если я хорошо помню, это не должно происходить в python 3, только в старых версиях python. Я надеюсь, что эта новая информация поможет вам дать ответ

–Поддержка 2–
ошибка возникает, даже если я не выполняю вывод из своего процесса, потому что устанавливаю:

 def u(): return 

как цель процесса, а затем запустить его, если я попытаюсь присоединиться к процессу, простоя ждет навсегда

4 Solutions collect form web for “почему процесс не объединяется и не запускается?”

Как было предложено здесь и здесь , проблема в том, что IDLE переопределяет sys.stdin и sys.stdout некоторыми странными способами, которые не распространяются чисто на процессы, которые вы порождаете из него (они не являются настоящими файловыми дескрипторами).

Первая ссылка также указывает на то, что вряд ли она будет исправлена ​​в ближайшее время («может быть проблема« не может исправить », говорят они).

Поэтому, к сожалению, единственным решением, которое я могу предложить, является не использование IDLE для этого скрипта …

Вы пытались добавить A.join() в свою программу? Я предполагаю, что ваш основной процесс завершается до того, как будет распечатываться дочерний процесс, который вызывает скрытие вывода. Если вы сообщите основному процессу ждать дочернего процесса ( A.join() ), я уверен, вы увидите A.join() результат.

Учитывая, что это происходит только с IDLE, я подозреваю, что проблема связана с stdout, используемым обоими процессами. Возможно, это какой-то файловый объект, который небезопасно использовать из двух разных процессов.

Если у вас нет дочернего процесса, напишите в stdout, я подозреваю, что он будет завершен и подключен должным образом. Например, вы могли бы записать его в файл. Или вы можете настроить канал между родителем и дочерним элементом.

Вы пробовали небуферизованный выход? Попробуйте импортировать модуль sys и изменить оператор печати:

 print >> sys.stderr, m 

Как это влияет на поведение? Я с другими, которые подозревают, что IDLE дергается с stdio. , ,

  • Разница между логической строкой и физической строкой в ​​python
  • Сохранение словарей в файл (numpy и Python 2/3)
  • Петля Python: индекс списка вне диапазона
  • Что означает {0} в этой строке Python?
  • Какова форма функции импорта звезды в Python 3
  • Формат строки python, вызывающий функцию
  • Многопроцессорная передача Непересекающиеся объекты между процессами
  • Почему Python2 и Python3 относятся к одинаковой директории Windows по-разному?
  •  
    Interesting Posts for Van-Lav

    Переклассификация экземпляра в Python

    Сохранение словаря массивов numpy

    Полный список протоколов / интерфейсов Python

    Как / где использовать os.path.sep?

    Неописанный скрипт неожиданно работает быстрее, чем версия Threaded

    Программа Python, которая находит наиболее частое слово в TXT-файле, должна печатать слово и его количество

    Как скомпилировать все ресурсы в один исполняемый файл?

    Выход из знака доллара в ноутбуке ipython

    Как я могу сделать команду «python» в терминале, запустить python3 вместо python2?

    Каков наилучший способ отключить кэширование шаблонов Jinja2 в файле bottle.py?

    «Внутреннее исключение» (с отслеживанием) в Python?

    Измените цвет всех пикселей на другой цвет

    Какую версию Visual Studio и / или MinGW мне нужно для создания модулей расширения для данной версии Python?

    Python: как я могу читать символы из строки в файле и преобразовывать их в float и strs, в зависимости от того, являются ли они цифрами или буквами?

    Значение XML <arg> Замена в Python

    Python - лучший язык программирования в мире.