什么是装饰器,使用装饰器实现同步访问
目录
下面是一个简单的例子,使用装饰器实现同步访问:
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 中使用锁机制来同步程序执行有时会造成