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
