サブスレッドが既に実行されているかどうかをチェックする関数を作成したいと思います。サブスレッドは、関数とパラメータを指定してサブスレッドを開始します。マルチスレッド・ツールとして、私はこのポストを使用します。Is there any way to kill a Thread in Python?サブスレッドをパラメータを含む任意の関数で開始する
アイデアは、これまでに以下の通りです:私が実行している場合
from ThreadEx import ThreadEx
class MyClass:
def __init__(self):
self.__Thread = ThreadEx(name='MyClass',target="")
self.GlobalVariable = "MyClass Variable"
def SubThread(self, function):
if not self.__Thread.is_alive():
print("Thread is not alive")
self.__Thread = ThreadEx(target=function(),args=(self,))
print("Thread is going to start")
self.__Thread.start()
print("Thread started")
else:
print("There is already a subthread running")
def MyFunction1(self, argument1, argument2, argument3):
self.SubThread(lambda: MyFunction1(self, argument1,argument2,argument3))
def MyFunction2(self, argument1, argument2):
self.SubThread(lambda: MyFunction2,argument1,argument2)
def MyFunction1(self, argument1, argument2, argument3):
print(self.GlobalVariable)
print("MyFunction1")
print("Argument1: " + str(argument1))
print("Argument2: " + str(argument2))
print("Argument3: " + str(argument3))
def MyFunction2(argument1, argument2):
print("MyFunction2")
print("Argument1: " + str(argument1))
print("Argument2: " + str(argument2))
は、残念ながら:
from Myclass import MyClass
self.MyClass = MyClass()
self.MyClass.MyFunction1("Test1","Test2","Test3")
を出力は、次のとおりです。
Thread is not alive
MyClass Variable
MyFunction1
Argument1: Test1
Argument2: Test2
Argument3: Test3
Thread is going to start
Thread started
したがって、関数はスレッドが開始する前に実行されます。だから私の質問は、どのようにサブスレッドにすべての引数を含むMyFunctionを送信し、毎回ルーチンを書くことなく他の関数でこれを繰り返すことができるかどうかです。 私はすでに* argsと** kwargsを探していましたが、正しい構文が見つからないか、間違った方法でした。
ありがとうございます! :)
は 自己.__スレッド= ThreadEx(対象=機能、引数の=(自己)) がうまくいかなかったに変更しますが、一般的な選択肢は非常によく問題を解決します!ありがとう! – Marc