• python 装饰器,传递类以及参数


    #!/usr/bin/env python
    # coding=utf-8
    
    import time
    #import redis
    
    class RedisLock(object):
        def __init__(self, key):
            #self.rdcon = redis.Redis(host='', port=6379, password="", db=1)
            self._lock = 0
            self.lock_key = "%s_dynamic_test" % key
    
        @staticmethod
        def get_lock(cls,timeout=10):
            print("get_lock!")
            '''
            while cls._lock != 1:
                timestamp = time.time() + timeout + 1
                cls._lock = cls.rdcon.setnx(cls.lock_key, timestamp)
                if cls._lock == 1 or (time.time() > cls.rdcon.get(cls.lock_key) and time.time() > cls.rdcon.getset(cls.lock_key, timestamp)):
                    print("get lock")
                    break
                else:
                    time.sleep(0.3)
            '''
    
        @staticmethod
        def release(cls):
            print("release!")
            '''
            if time.time() < cls.rdcon.get(cls.lock_key):
                print("release lock")
                cls.rdcon.delete(cls.lock_key)
            '''
     
    def deco(cls):
        def _deco(func):
            def __deco(*args, **kwargs):
                print("before {} called [{}].".format(func.__name__, cls))
                cls.get_lock(cls)
                try:
                    return func(*args, **kwargs)
                finally:
                    cls.release(cls)
            return __deco
        return _deco
    
    @deco(RedisLock("112233"))
    def myfunc(i):
        print(i)
        print("myfunc() called.")
        time.sleep(10)
    
    if __name__ == "__main__":
        myfunc(3)

    输出

    before myfunc called [<__main__.RedisLock object at 0x0000026239D0A7F0>].
    get_lock!
    3
    myfunc() called.
    release!
  • 相关阅读:
    Objective-C代码规范
    Http中Get/Post请求区别
    使用Vitamio打造自己的Android万能播放器
    Vitamio
    图片瀑布流
    TCP与UDP
    SQLite基本操作总结
    IOS文件操作的两种方式:NSFileManager操作和流操作
    JSON和XML
    一些iOS常用的第三方库和控件及第三方框架还有动画
  • 原文地址:https://www.cnblogs.com/sea-stream/p/10798989.html
Copyright © 2020-2023  润新知