Python Thread (初心者向けサンプル)

基本的な簡単なサンプルを書き留めておきます、

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 タプルの渡し方で、最後にカンマ(,) が必要になる。