При использовании Python 2.6.1 в Mac OS X 10.6.2 возникает следующая проблема:
У меня есть многопоточный процесс (класс Thread), и у каждого из этих потоков есть канал (подпроцесс. Открыто), что-то любит:
from threading import Thread
cmd = "some_cmd"
class Worker(Thread):
def run(self):
pipe = Popen(cmd,
stdin=PIPE,
stdout=PIPE,
stderr=PIPE)
out, err = pipe.communicate("some data")
Проблема в том, что код pipe.communicate () блокируется. Интересно, что когда я отправлял прерывание (например, Ctrl-C
KeyboardInterrupt) родительскому процессу, он разблокируется.
Интересно, что когда я использую class Worker(multiprocessing.Process)
, код работает просто отлично.
Любые мысли о том, почему это блокирует - и как это исправить - , будут с благодарностью.
Спасибо.