明示的な呼び出し前のスレッド実行
Python のマルチスレッド モジュールでは、Thread オブジェクトを使用してコードを並列実行できます。ただし、スレッドの作成および構成時に異常な動作が発生する可能性があります。
次に示すように、末尾括弧を使用してスレッドのターゲット引数に関数を渡すときに問題が発生します。
t1 = threading.Thread(target=self.read())
この動作これは、target=self.read() を呼び出すとスレッドに self.read() の実行が割り当てられるという誤解から生じています。残念ながら、これは間違いです。括弧を追加すると、関数がすぐに呼び出され、代わりにその戻り値がターゲットとして割り当てられます。 Thread オブジェクトの場合、ターゲットとして関数を受け取ることが期待されます。
この問題を解決するには、ターゲット引数からかっこを削除し、スレッドの start() メソッドを明示的に呼び出します。
t1 = threading.Thread(target=self.read) t1.start()
これで、self.read() は新しく作成されたスレッドで無期限に実行され、プログラムが続行して「何か」を出力できるようになります。この変更により、関数がターゲットとして正しく割り当てられ、途中で実行されないようになります。
以上がPython スレッドを明示的に開始する前に実行されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。