在Mac OS X 10.6.2使用Python 2.6.1,我以下的問題:Python的調用pipe.communicate()在一個線程
我有一個螺紋加工(Thread類),每那些線程的具有管(subprocess.Popen)東西likeso:
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)
時,代碼工作得很好。
任何想法爲什麼這是阻止- 以及如何解決它 -將不勝感激。
謝謝。
剛剛找到http://stackoverflow.com/questions/984941/python-subprocess-popen-from-a-thread - 但我不知道從那是什麼修復(還)! – 2010-03-30 02:08:48
看起來像Popen可能不是線程安全的。非常有義務進行更正或澄清。找到有關該主題的http://mail.python.org/pipermail/python-bugs-list/2007-August/039177.html。 – 2010-03-30 02:14:07
溝通()是*假設*阻止。你的意思是它阻止了整個程序,而不是它正在運行的線程?你能提供一個完整的示例程序嗎? – 2010-03-30 04:37:45