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)

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

  • 相关阅读:
    C# 复制文件夹,移动文件夹
    让Base64适合在URL中使用
    修复FIREBIRD数据库
    Image.FromFile 锁文件的解决办法
    Powerbuilder 12.5 下载地址
    C# 给程序添加许可
    WIN FORM 多线程更新UI(界面控件)
    .Net WinForm 拖动控件
    SQL Server 自动增长清零
    C# 一次生成多个相同的字符
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4907195.html
Copyright © 2011-2022 走看看