Pythonのスレッドに引数を渡そう
前回はPythonのスレッドを使って処理を並列で動かしました。
今回はスレッドに引数を渡して処理を並列で動かしてみましょう。
スレッドの引数を渡すオプション
スレッドに引数を渡すには、argsオプションを使います。
argsオプションにはタプルを設定します。
タプルには渡したい引数の数だけ値を設定できます。
オブジェクト名 = threading.Thread(target=呼び出し可能オブジェクト, args=(引数1,引数2,…))
なお、argsオプションはタプルなので、引数がひとつしかない場合は引数の後ろに,(カンマ)を付けることを忘れないでください。
例
thread = threading.Thread(target=func, args=(1,))
スレッドに引数を渡すプログラム
スレッドに引数を渡すプログラムは、以下のようになります。
同じ関数に引数を渡して、処理を並列で動かしています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
### インポート import time import tkinter import threading ### 関数 def func(num, gap, pos_x, pos_y): ### 変数宣言 cnt = 0 ### 10未満の間ループ while cnt < 10: ### カウントアップ cnt += num ### キャンバス書き込み id = canvas.create_text(pos_x, pos_y, text=cnt, font=(None,48)) ### 待ち時間 time.sleep(gap) ### キャンバス初期化 canvas.delete(id) ### キャンバス作成 canvas = tkinter.Canvas(master=None, width=420, height=200) ### キャンバス表示 canvas.pack() ### スレッド作成 thread1 = threading.Thread(target=func, args=(1,1,140,100)) thread2 = threading.Thread(target=func, args=(2,2,280,100)) ### スレッド開始 thread1.start() thread2.start() ### イベントループ canvas.mainloop() |
プログラムを実行すると、以下のように二つの数字が別々に表示されます。
前回のプログラムと同じ動きをします。