排他処理デコレータ

ついでに排他処理やってくれるデコレータも作った。
てか検索すると同じようなデコレータの例がたくさん。
Synchronized.py

# -*- coding:utf-8 -*-
from threading import Lock
lock = Lock()
def Synchronized():
    def decorator(srcfunc):
        def dstfunc(*args, **kwargs):
            lock.acquire()
            try:
                return srcfunc(*args, **kwargs)
            finally:
                lock.release()
        return dstfunc
    return decorator

test.py

# -*- coding:utf-8 -*-
from threading import Thread
from Synchronized import Synchronized
import time

class threadtest(Thread):
    def __init__(self,name):
        Thread.__init__(self)
        self.setDaemon(True)
        self.name = name
        self.n = 1

    def run(self):
        while True:
            self.Pause()
            print self.name,self.n
            time.sleep(1)
            self.n += 1

    @Synchronized()
    def Pause(self):
        if self.n % 5 == 0:
            for i in xrange(3):
                time.sleep(1)
                print self.name, "PAUSE"

if __name__ == '__main__':
    a = threadtest("test1")
    a.start()
    time.sleep(2)
    b = threadtest("test2      ")
    b.start()
    time.sleep(15)

実行結果

test1 1
test1 2
test1 3
test2       1
test2       2
test1 4
test1 PAUSE
test1 PAUSE
test1 PAUSE
test1 5
test2       3
test1 6
test2       4
test1 7
test2       PAUSE
test2       PAUSE
test2       PAUSE
test2       5
test1 8
test1 9
test2       6
test1 PAUSE
test1 PAUSE
test1 PAUSE
test1 10
test2       7

楽だねこれは。