基本的な簡単なサンプルを書き留めておきます、
Thread の説明
class threading.Thread(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)
group = ThreadGroupが将来実装された時の予約語で、None とすべき引数
target = 呼び出し可能オブジェクトを指定する。(メソッド名など)
name = スレッド名、未指定は、"Thread-N"(Nは10進数で1から、)
args = target を呼び出すときの引数のリストかタプル。デフォルトは ()
kwargs = target を呼び出すときのキーワード引数の辞書。デフォルトは {}
daemon = True/Falseでデーモンスレッドであるかを指定する。省略で呼び出し元の指定を継承する。
デーモンスレッドの指定は残っているスレッドがデーモンスレッドだけになった時に
Python プログラム全体を終了させることになります。
サンプル
# -*- coding: utf-8 -*- import time import threading def func(): print("[%s] -- func start\n" % threading.current_thread()) time.sleep(2) print("[%s] -- func end" % threading.current_thread()) if __name__ == "__main__": thread = threading.Thread(target=func, name=('thread-A')) print("[%s] -- main 1" % threading.current_thread()) thread.start() print("[%s] -- main 2" % threading.current_thread())
結果
[<_MainThread(MainThread, started 10076)>] -- main 1 [<Thread(thread-A, started 11976)>] -- func start [<_MainThread(MainThread, started 10076)>] -- main 2 [<Thread(thread-A, started 11976)>] -- func end
待ち合わせ同期は join() で。
thread = threading.Thread(target=func, name=('thread-A')) print("[%s] -- main 1" % threading.current_thread()) thread.start() thread.join() print("[%s] -- main 2" % threading.current_thread())
これで、以下の結果になります
[<_MainThread(MainThread, started 7672)>] -- main 1 [<Thread(thread-A, started 1648)>] -- func start [<Thread(thread-A, started 1648)>] -- func end [<_MainThread(MainThread, started 7672)>] -- main 2
もし、実行するサブスレッドが引数を必要とする場合の args の書き方に注意が必要である
例)
def func(v: int)->int:
の場合、
thread = threading.Thread(target=func, name=('thread-A'), args=(12,))
と、args タプルの渡し方で、最後にカンマ(,) が必要になる。