つまり、ypuはおそらくどこかで「グローバル変数を使用するのは良い習慣ではない」と読んでいたでしょう。これが理由です。「p」変数は「Process」インスタンスを1つだけ保持し、開始(および終了)できるのは1回だけです。
「fun1」と「fun2」がパラメーターとして機能するプロセスを実行するように、またはおそらくオブジェクト指向の方法で、fun1とfun2がメソッドであり、プロセスがインスタンス変数であるようにコードをリファクタリングする場合、これらの問題のいずれかがあります。
この場合、OOはすぐに確認でき、簡単に使用できます。
class MyClass(object):
def __init__(self):
self.p = Process(target=realwork,args=(up,down,middle,num))
def fun1(self):
self.p.start()
def fun2(self):
self.p.terminate()
そして、「fun1」と「fun2」のペアの呼び出しが必要な場合は、次のようにします。
action = Myclass()
action.fun1()
action.fun2()
代わりは。これは、forループなどの内部でも機能します。
*編集-Tkinterプログラムでボタンを押したときの答えとしてこれを使用しているのを見たばかりなので、ボタンのクリックの間のどこかにProcessインスタンスを記録する必要があります。リファクタリングするコードがなくても、グローバル変数アプローチを継続するつもりであれば、「fun1」内にProcessインスタンスを作成するだけで済みます。これは機能します。
def fun1():
global p
p = Process(target=realwork,args=(up,down,middle,num))
p.start()
def fun2():
p.terminate()