最初に、私が探している解決策を Windows で動作させる必要があることをもう一度指摘しなければなりません。申し訳ありません。私が達成したいのは、プロセス間で非同期に通信することです。さて、私の問題はもっと複雑ですが、その本質を説明します。私は2つの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_signalSIGTERM
は,CTRL_C_EVENT
またはのみCTRL_BREAK_EVENT
であり、received_signal (ハンドラーを定義できるシグナル) はSIGABRT
, SIGFPE
, SIGILL
, SIGINT
, SIGSEGV
, またはSIGTERM
です。したがって、一見するSIGTERM
と、プロセス間で通信できるシグナルですが、Windows では送信SIGTERM
はシグナルを送信するのではなく、terminate()
関数を呼び出します。したがって、通信に信号を使用する方法はありません。そして、この時点で、私は自分の問題をどのように解決できるかについてのアイデアがありません。を使用した同期方法は、Popen.communicate()
リアルタイムで印刷する必要があるため、オプションではありません。
だから私の質問は: Windows 上のプロセス間の非同期通信の方法はありますか?