2009年10月14日水曜日

スレッドをロックする

threadingモジュールの
Lock, RLock, Condition, Semaphore オブジェクトを使う

# -*- coding: utf-8 -*-

import threading
import time

LOCK = threading.Lock()

def func():
    for i in range(10):
        time.sleep(0.1)
        print i,
    print

def lock_func():
    # with文を使わない場合はacquireとreleaseメソッドを使う
    with LOCK:
        func()

a = threading.Thread(target=func)
b = threading.Thread(target=func)
print "unlock"
a.start()
b.start()

a.join()
b.join()

c = threading.Thread(target=lock_func)
d = threading.Thread(target=lock_func)
print "lock"
c.start()
d.start()

実行すると
unlock
0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9
9
lock
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9

詳細はドキュメントで

0 件のコメント:

コメントを投稿