一开始,我必须再次指出我正在寻找的解决方案,必须在Windows上工作,对不起。 我想要实现的是异步地在进程之间进行通信。好吧,我的问题要复杂得多,但我会解释它的本质。 我有两个python文件:
test.py
import subprocess
import signal
import time
sent_signal = signal.SIGTERM
if __name__ == "__main__":
process = subprocess.Popen( "python sub_test.py" )
time.sleep( 2 )
process.send_signal( sent_signal )
和
sub_test.py
import signal
received_signal = signal.SIGTERM
event = False
def signal_handler( signum, frame ):
event = True
if __name__ == "__main__":
signal.signal( signal.SIGTERM, signal_handler )
while True:
if event:
print "Event"
event = False
else:
print "Working..."
正如python文档所说 sent_signal 只能是SIGTERM
,CTRL_C_EVENT
或CTRL_BREAK_EVENT
,当 received_signal 时(信号)我可以定义处理程序)可以是:SIGABRT
,SIGFPE
,SIGILL
,SIGINT
,SIGSEGV
或SIGTERM
。因此,乍一看SIGTERM
是我可以在进程之间进行通信的信号,但是在Windows上发送SIGTERM
不是发送信号,而是调用terminate()
函数。所以我看到没有办法使用信号进行通信。在这一点上,我没有想法,我如何解决我的问题。
使用Popen.communicate()
的同步方式不是一个选项,因为我需要实时打印输出。
所以我的问题是:Windows上的进程之间是否存在异步通信方式?