22
t1=threading.Thread(target=self.read())
print("something")
t2=threading.Thread(target=self.runChecks(), args=(self,))

self.readは無期限に実行されるため、プログラムがラインに到達することはありませんprint。電話せずにこれはどのように可能t1.start()ですか?(それを呼んでも、走り出して次の行に進むのではないでしょうか?)

4

1 に答える 1

41

の末尾が原因()で、間違ったスレッドでtarget=self.read()実行されています。作成している新しいスレッドではなく、現在のスレッドであり、呼び出しの戻り値をの引数として渡します。呼び出す関数が渡されることを期待しているので、かっこを削除して、スレッドを開始することを忘れないでください。self.readself.readtargetThreadThread

t1=threading.Thread(target=self.read)
t1.start()
print("something")

引数が必要なターゲットの場合は、argskwargs引数を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、、、ab検索するため、スレッドがスケジュールされる前にこれらの変数のいずれかを再割り当てすると、予期しない結果が生じる可能性があります(すぐに電話しても、任意に時間がかかります)。clambdastart

于 2012-08-03T09:10:43.970 に答える