zoukankan      html  css  js  c++  java
  • 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)

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

  • 相关阅读:
    Swift中的单例的实现方式
    关于iOS自定义UITabBar的几种方法
    iOS数据持久化(三)
    iOS数据持久化(二)SQLite
    iOS数据持久化(一)
    iOS自定义NavigationBar
    UINavigationController基本使用
    UILabel 整理
    [DEMO]AR 1
    [分享]自主行驶小车idea
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4907195.html
Copyright © 2011-2022 走看看