t1=threading.Thread(target=self.read())
print("something")
t2=threading.Thread(target=self.runChecks(), args=(self,))
self.read
は無期限に実行されるため、プログラムがラインに到達することはありませんprint
。電話せずにこれはどのように可能t1.start()
ですか?(それを呼んでも、走り出して次の行に進むのではないでしょうか?)
t1=threading.Thread(target=self.read())
print("something")
t2=threading.Thread(target=self.runChecks(), args=(self,))
self.read
は無期限に実行されるため、プログラムがラインに到達することはありませんprint
。電話せずにこれはどのように可能t1.start()
ですか?(それを呼んでも、走り出して次の行に進むのではないでしょうか?)
の末尾が原因()
で、間違ったスレッドでtarget=self.read()
実行されています。作成している新しいスレッドではなく、現在のスレッドであり、呼び出しの戻り値をの引数として渡します。呼び出す関数が渡されることを期待しているので、かっこを削除して、スレッドを開始することを忘れないでください。self.read
self.read
target
Thread
Thread
t1=threading.Thread(target=self.read)
t1.start()
print("something")
引数が必要なターゲットの場合は、args
とkwargs
引数をthreading.Thread
使用するか、ラムダを使用できます。たとえばf(a, b, x=c)
、スレッドで実行するには、次のように使用できます。
thread = threading.Thread(target=f, args=(a, b), kwargs={'x': c})
また
thread = threading.Thread(target=lambda: f(a, b, x=c))
ただし、ラムダを選択する場合は注意してください-ラムダは、が定義されているときではなく、使用時にf
、、、a
をb
検索するため、スレッドがスケジュールされる前にこれらの変数のいずれかを再割り当てすると、予期しない結果が生じる可能性があります(すぐに電話しても、任意に時間がかかります)。c
lambda
start