什么是装饰器,使用装饰器实现同步访问

目录

下面是一个简单的例子,使用装饰器实现同步访问:

python
from threading import Lock

lock = Lock()

def synchronized(func):
    def wrapper(*args, **kwargs):
        with lock:
            return func(*args, **kwargs)
    return wrapper

@synchronized
def shared_resource_access():
    # access shared resource
    pass

这里的 synchronized 是一个装饰器, 它接受一个函数作为参数, 返回一个新函数。 @synchronized 将 shared_resource_access 函数传递给 synchronized, synchronized 返回 wrapper 函数,并将 wrapper 函数的名字替换为 shared_resource_access。 在 wrapper 中使用了 Python 内置的 threading 模块的 Lock, 在 wrapper 函数执行时获取锁,保证其他线程在该函数执行时无法进入,保证了该函数的线程安全性。

这样就可以在不修改 shared_resource_access 的情况下为函数添加线程安全性。

这只是一个简单的例子,在实际应用中,同步访问可能需要使用更加成熟的库,例如 threading, multiprocessing, asyncio 模块等。 同时,在 Python 中使用锁机制来同步程序执行有时会造成

随机文章