Python スレッドをやってみる

2011/01/17

スレッドを生成する方法は2つある

  1. threading.Threadのコンストラクタへ呼出し可能オブジェクトを渡す方法
  2. 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

Python

Posted by skw