Python スレッドをやってみる
スレッドを生成する方法は2つある
- threading.Threadのコンストラクタへ呼出し可能オブジェクトを渡す方法
- threading.Threadのサブクラスをつくり、run() メソッドをオーバライドする方法
今回は呼出し可能オブジェクトを渡す方法をメモしておく。
- コンストラクタへオブジェクトを渡す方法の基本形
- スレッドの名前を与えて生成してみる
- スレッドを2つ生成してみる
- 引数を渡してスレッドを生成してみる
基本形
import threading def DoSomething(): for i in range(10): print i if __name__=='__main__': t=threading.Thread(target=DoSomething) t.start()
実行結果
01 2 3 4 5 6 7 8 9
スレッドの名前を与えて生成してみる
import threading def DoSomething(): for i in range(10): print threading.currentThread().getName(),i if __name__=='__main__': t=threading.Thread(target=DoSomething,name="thr1") t.start()
実行結果
thr1 0 thr1 1 thr1 2 thr1 3 thr1 4 thr1 5 thr1 6 thr1 7 thr1 8 thr1 9
スレッドを2つ生成してみる
import threading def DoSomething(): for i in range(10): print "[%s]%d" % (threading.currentThread().getName(),i) if __name__=='__main__': t1=threading.Thread(target=DoSomething,name="thr1") t2=threading.Thread(target=DoSomething,name="thr2") t1.start() t2.start()
実行結果
[thr1]0 [thr1]1[thr2]0 [thr1]2[thr2]1 [thr1]3[thr2]2 [thr2]3[thr1]4 [thr2]4[thr1]5 [thr2]5[thr1]6 [thr2]6[thr1]7 [thr2]7[thr1]8 [thr2]8[thr1]9 [thr2]9
引数を渡してスレッドを生成してみる
import threading import time def DoSomething(nsleep): for i in range(10): print "[%s]%d" % (threading.currentThread().getName(),i) time.sleep(nsleep) if __name__=='__main__': t1=threading.Thread(target=DoSomething,name="thr1",args=(0.1,)) t2=threading.Thread(target=DoSomething,name="thr2",args=(0.2,)) t3=threading.Thread(target=DoSomething,name="thr3",args=(0.3,)) t1.start() t2.start() t3.start()
実行結果
[thr1]0 [thr2]0 [thr3]0 [thr1]1 [thr2]1[thr1]2 [thr3]1[thr1]3 [thr2]2 [thr1]4 [thr1]5 [thr2]3 [thr3]2 [thr1]6 [thr1]7 [thr2]4 [thr1]8 [thr3]3 [thr1]9 [thr2]5 [thr2]6 [thr3]4 [thr2]7 [thr3]5 [thr2]8 [thr2]9 [thr3]6 [thr3]7 [thr3]8 [thr3]9