class MyDLock(object):
    def __init__(self, lockID,timeout):
        self.connection = redis.Redis(host=cfg.REDIS_SERVER_IP, port=cfg.REDIS_SERVER_PORT, password=cfg.REDIS_SERVER_PWD, db=cfg.REDIS_SERVER_DB_NUM,decode_responses=True)
        self.__lockID = lockID
        self.__timeout  = timeout

    def tryLock(self, appid):
        #To_Main
        try:
            val=self.connection.get(self.__lockID)
            if val is None:
                logging.info("The app(%s) try lock(%s) ok." % (appid, self.__lockID));
                self.connection.set(self.__lockID, appid, ex=self.__timeout)
                return True
            else:
                logging.info("The owner of lock(%s) is %s. you(%s) can not get it"%(self.__lockID, val, appid));
                return False
        except Exception as e:
            logging.error("Warning: Can't write log. (%s)" % e)
            return False

    def activeLock(self, appid):
        #心跳,定期激活
        val = self.connection.get(self.__lockID)
        if val is None:
            logging.info("There is no lock(%s)." % (self.__lockID));
            return False
        else:
            if appid == val:
                #只能激活自己的锁
                logging.info("Application(%s) active lock(%s) ok." % (appid, self.__lockID));
                self.connection.set(self.__lockID, appid, ex=self.__timeout)
                return True
            else:
                #不能激活非自己的锁
                logging.info("Application(%s) can not active lock(%s). The owner is (%s)" % (appid, self.__lockID, val));
                return False

    def releaseLock(self, key, appid):
        val = self.connection.get(self.__lockID)
        if val is None:
            return False
        else:
            if appid == val:
                # 只能删除自己的锁
                self.connection.delete(self.__lockID)
                return True
            else:
                # 不能删除非自己的锁
                return False

 

相关文章:

  • 2021-06-17
  • 2021-09-08
  • 2021-04-28
  • 2021-05-23
  • 2022-12-23
  • 2021-11-29
猜你喜欢
  • 2021-11-29
  • 2019-02-25
  • 2021-09-12
  • 2021-09-30
  • 2022-12-23
  • 2018-12-04
相关资源
相似解决方案