def synchronized(func):
"""Decorator for storage-access methods, which synchronizes on a threading
lock. The parent object must have 'is_closed' and '_sync_lock' attributes.
"""
@wraps(func)
def synchronized_wrapper(self, *args, **kwargs):
with self._sync_lock:
return func(self, *args, **kwargs)
return synchronized_wrapper
代码在whoosh / src / util.py中,我无法理解synchronized_wrapper的效果以及synchronized_wrapper(self,* args,** kwargs)中的参数。谁能给我一些指示?
答案 0 :(得分:0)
@wraps
装饰器只是带有参数转发的函数闭包的语法糖。 *args
指的是位置参数的元组,而**kwargs
指的是已传递给func
的所有关键字参数的字典。
因此,如果你有:
def f(foo, bar=None):
...
并做了:
sync_f = someinst.synchronized(f)
sync_f(a, bar=z)
它基本上就像打电话:
f(a, bar=z)
但在“with self._sync_lock:
”上下文管理器
答案 1 :(得分:0)
修饰函数会导致基于反射的操作出现问题,@wraps
旨在使包装函数真正模拟原始函数。 The link提供的lucemia具有适用信息。