python中的mutex decorator

2024-09-19 23:45:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我看到了这样的情况:http://yukelzon.blogspot.com/2005/07/python-locks.html在寻找一个解决方案,在写入文件时向现有代码添加一些锁定。在

我需要的简化版本如下所示:

  def mlock(orig):
    def inner(*args, **kwargs):
      Coloring.lock.acquire()
      try:
        ret = orig(*args, **kwargs)
        return ret
      finally:
        Coloring.lock.release()
    return inner

锁是一个类变量。有人能想出改进或更好的办法吗?在


Tags: comlockhttpreturndef情况argskwargs
2条回答

如果您使用的是Python 2.6+(我认为),互斥对象是上下文管理器,因此:

def mlock(f):
    def inner(*args, **kwargs):
        with Coloring.lock:
            return f(*args, **kwargs)
    return inner

我不喜欢自由变量。我可能会将锁作为decorator的显式变量,如下所示:

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

好吧,既然Coloring是一个类变量,并且如果您希望它对该类非常特定,那么显式地访问它:

^{pr2}$

或者,至少声明锁是全局的

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

相关问题 更多 >