0

最初に、私が探している解決策を 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 上のプロセス間の非同期通信の方法はありますか?

4

0 に答える 0