0
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) 中的参数从哪里来。谁能给我一些指示?

4

2 回答 2

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:”上下文管理器中

于 2012-12-12T02:57:53.993 回答
0

装饰函数会导致基于反射的操作出现问题,并且@wraps旨在使包装函数真正模拟原始函数。 提供的链接lucemia 具有适用的信息。

于 2012-12-12T03:06:08.063 回答