スレッド


スレッドを使うと1つのプログラム(プロセス)内で、複数の動作を同時に行うことができます。Pythonにはthreadモジュールとthreadingモジュールが用意されていて、これらのモジュールを使用することにより、スレッドを利用できます。

threadモジュールは低レベルのスレッド処理が必要なとき使用します。threadingモジュールは高レベルなスレッド処理に利用します。

 

 threadモジュール

threadモジュールのstart_new_thread関数を使うと、指定した関数をスレッドとして実行できます。この関数はビルトイン関数applyと同じ使い方をします。最初の引数は関数名で、2番目に引数(tuple)を指定します。オプションとして3番目の引数も指定できます。これはキーワードで引数を指定するものです。

サンプル

# Thread test
import thread

n = 0

def func1() :
	global n
	while 1 :
		n += 1
		if n > 10000000 :
			break

args = ()
thread.start_new_thread(func1, args)

while 1 :
	print n
 

 

 threadingモジュール

threadingモジュールを使うと、スレッドをオブジェクトのように扱うことができます。具体的には、threading.Threadクラスを継承したクラスを作成して、その中のrun()メソッドをオーバーライドしてアプリケーション独自の処理をさせるものです。threading.Threadクラスではrun()メソッドとコンストラクタ(__init__)だけをオーバーライドします。ただし、__init__のオーバーライドは必要がなければ行いません。__init__をオーバーライドするときは、必ず他の処理を行う前に、基本クラス(Threadクラス)のコンストラクタを呼び出します。

サンプル

# Thread test
import threading

class MyTask(threading.Thread) :
    def run(self) :
        for i in range(0, 20) :
            print i

task1 = MyTask()
task1.run()
print 'end'