python装饰实现线程同步

时间:2023-03-09 06:07:28
python装饰实现线程同步

import threading

def tryfinally(finallyf):

  u"returns a decorator that adds try/finally behavior with given no-argument call in the finally"

  print "tryfinally"

  def decorator(callable):

    print "decorator"

    def execute(*args, **kwargs):

      print "execute1"

      try: result = callable(*args, **kwargs)

      finally: finallyf()

      return result

    return execute

  return decorator



def usinglock(lock):

  u"returns a decorator whose argument will acquire the given lock while executing"

  print "usinglock"

  def decorator(function):

    print "decorator"

    body = tryfinally(lock.release)(function)

    def execute(*args, **kwargs):

      print "execute"

      lock.acquire()

      return body(*args, **kwargs)

    return execute

  return decorator



def synchronized(function):

  u"decorator; only one thread can enter the decorated function at a time; recursion is OK"

  print "synchronized"

  return usinglock(threading.RLock())(function)









@synchronized

def foo(*args):

  print "Only one thread can enter this function at a time"





if __name__=="__main__":

  foo(123)

版权声明:本文博主原创文章。博客,未经同意不得转载。