2017-05-12 12 views
-1

メインでプロセスを開始し、def関数で終了する方法を知りたい。私のコードでは、関心のあるアプリケーションを実行するプロセスがあり、Tkinterを使用して簡単なGUIを実行する別のプロセスがあり、ボタンを押すのを待っています。このボタンを押すと、プロセスが強制終了されます。例えば:AttributeError: 'NoneType' object has no attribute 'terminate'Python - メインで開始されたプロセスを終了する

が、私はmainでそれを終了しようとすると、それが動作します:

def pro_a(): 
    #Runs the application 

def pro_b(): 
    root.mainloop() # Runs the GUI 

def buttonCallBack() 
    #I want to terminate the processes here 
    #I've tried doing: p1.terminate() 

b = Button(frame, .........., command = buttonCallBack) 
b.place(......) 

if __name__ == '__main__': 
    p1 = Process(target=pro_b) 
    p2 = Process(target=pro_a) 
    p1.start() 
    p2.start() 

私はこれをしようとすると、それは私にエラーを与えます。しかし、それは私が望むものではありません。明らかにするには、メインでプロセスを開始し、ボタンが押されたらプロセスを終了する必要があります。

+0

「AttributeError」の取得方法はわかりません。 'NameError'を取得する必要があります。なぜなら、' p1'は 'buttonCallBack'がそれを見ることができるどこにも定義されていないからです。あなたの例には何かがありませんか? –

+0

私はそうは思わない。私は関連するすべてのコードを含んでいます。変わったことは、私がメインコードをbuttonCallBack関数に入れて同じコードを入れたら、終了しようとしているということです。私は関数内でそのプロセスを終了しなければならないようです。しかし、それは私が望むものではありません。 – BBEng

+0

'p1'の値を再割り当てしますか? –

答えて

1

pro_b()をサブプロセスで起動しないでください。ちょうどpro_b()を呼び出してください。私はpro_b()子プロセスがpro_a()子プロセスへの参照なしで終わると思います。 pro_b()を直接呼び出すと、親プロセスから子プロセスpro_a()が強制終了されます。

関連する問題