python中的互斥修饰符
我看到了这一点:在寻找一种解决方案,在写入文件时向现有代码添加一些锁定 我需要的简化版本如下所示:python中的互斥修饰符,python,locking,coding-style,mutex,decorator,Python,Locking,Coding Style,Mutex,Decorator,我看到了这一点:在寻找一种解决方案,在写入文件时向现有代码添加一些锁定 我需要的简化版本如下所示: def mlock(orig): def inner(*args, **kwargs): Coloring.lock.acquire() try: ret = orig(*args, **kwargs) return ret finally: Coloring.lock.release() re
def mlock(orig):
def inner(*args, **kwargs):
Coloring.lock.acquire()
try:
ret = orig(*args, **kwargs)
return ret
finally:
Coloring.lock.release()
return inner
锁是一个类变量。有人能想出改进或更好的方法吗?如果您使用的是Python 2.6+(我认为),互斥对象是上下文管理器,因此:
def mlock(f):
def inner(*args, **kwargs):
with Coloring.lock:
return f(*args, **kwargs)
return inner
我不喜欢自由变量。我可能会将锁作为装饰器的显式变量,如下所示:
def mlock(Coloring):
def mlock_decorator(orig):
def inner(*args, **kwargs):
Coloring.lock.acquire()
try:
ret = orig(*args, **kwargs)
return ret
finally:
Coloring.lock.release()
return inner
return mlock_decorator
因为着色是一个类变量,如果您希望它非常特定于该类,请显式访问它:
def mlock(orig):
def inner(self, *args, **kwargs):
self.Coloring.lock.acquire()
try:
ret = orig(self, *args, **kwargs)
return ret
finally:
self.Coloring.lock.release()
return inner
或者,至少,声明锁是全局锁
def mlock(orig):
global Coloring
def inner(*args, **kwargs):
Coloring.lock.acquire()
try:
ret = orig(*args, **kwargs)
return ret
finally:
Coloring.lock.release()
return inner
访问锁的方案,无论是全局的还是给定的,都没有“正确的方法”,只是根据需要有不同的方法。回答的版本在功能上与python wiki上的半官方版本相同,也值得一看: