Pythonのthreadモジュール

Download Report

Transcript Pythonのthreadモジュール

Pythonのthreadモジュール
Pythonのthreadモジュール





スレッド
threadモジュール
threadモジュールの使用例: Thread_Test.py
threadingモジュール
threadingモジュールの使用例: Test_Treading.py
Pythonのthreadモジュール
スレッド




スレッドを使うと1つのプログラム(プロセス)内で、複
数の動作を同時に行うことができます。
Pythonにはthreadモジュールとthreadingモジュールが
用意されていて、これらのモジュールを使用すること
により、スレッドを利用できます。
threadモジュールは、低レベル(簡略手順)のスレッド
処理に使用します。
threadingモジュールは、高レベル(スレッドをオブジェ
クトのように扱う)スレッド処理に利用します。
Pythonのthreadモジュール
threadモジュール




threadモジュールのstart_new関数, start_new_thread
関数を使うと、指定した関数をスレッドとして実行でき
ます。
start_new関数, start_new_thread関数の1番目の引数
は、スレッドとして実行する関数名を指定します。
2番目の引数は、スレッドとして実行する関数に渡す
引数(tuple)を指定します。
オプションとして3番目の引数も指定できます。これは
キーワードで引数を指定するものです。
threadモジュールの使用例
Thread_Test.py
# Thread test
import thread
import time
n=0
def func1() :
global n
while 1 :
n += 1
if n > 10000000 :
break
time.sleep(5)
args = ()
thread.start_new_thread(func1, args)
while 1 :
print n
time.sleep(3)
Pythonのthreadモジュール
Thread_Test.py
Pythonのthreadモジュール
threadingモジュール

threadingモジュールを使うと、スレッドをオブジェクトのように扱う
ことができます。

具体的には、threading.Threadクラスを継承したクラスを作成して、
その中のrun()メソッドをオーバーライドしてアプリケーション独自
の処理をさせるものです。
threading.Threadクラスではrun()メソッドとコンストラクタ(__init__)だ
けをオーバーライドします。
ただし、__init__のオーバーライドは必要がなければ行いません。
__init__をオーバーライドするときは、必ず他の処理を行う前に、基
本クラス(Threadクラス)のコンストラクタを呼び出します。



threadingモジュールの使用例
Test_Treading.py
# Threading test
import threading, time
class MyTask(threading.Thread) :
def run(self) :
for i in range(0, 20) :
print i
time.sleep(1)
task1 = MyTask()
task1.run()
print 'end'
Pythonのthreadモジュール
Test_Treading.py