def sync(func):
def wrap(*args,**kv):
self.lock.acquire()
print 'in wrap'
print args
print kv
try:
return func(*args,**kv)
finally:
self.lock.release()
return wrap
import threading
class C(object):
def __init__(self):
self.lock=threading.Lock()
@sync
def aaa(self,m,m2):
print 'm is',m
print 'm2 is',m2
@sync
def bbb(self,n='nnn'):
print 'n is',n
ccc=C()
ccc.aaa('yes',m2='yes2')
print '########################'
ccc.bbb(n='no')
###############################################
func的参数会直接传给wrap函数, 装饰器函数里面就是要定义一个函数(被返回),注意return func是用到了“闭包”的特性。