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

最新文章

  1. windows上面捕获声卡数据
  2. 关于 QImage::Format_Mono
  3. 64bit upload app store
  4. 如何使用coding.net
  5. 使用mysql服务来记录用户的反馈
  6. 让图片完全显示出来,应对overflow,以及在背景中完全显示出来
  7. Java IO(四)
  8. [HIve - LanguageManual] Union
  9. java反射案例讲解
  10. bzoj2333
  11. Selenium索引
  12. android ViewFlipper的使用
  13. frame和iframe
  14. Html 小插件10 即时新闻
  15. Linux下Birt、JTreeChart中文乱码问题解决办法
  16. 微信小程序之页面跳转路径问题
  17. [国嵌笔记][011][Linux密码破解]
  18. 【环套树+树形dp】Bzoj1040 [ZJOI2008] 骑士
  19. hdu1256
  20. svn提交报错Previous operation has not finished; run 'cleanup' if it was interrupted

热门文章

  1. Thinkphp解决phpExcel导出数据量大导致内存溢出
  2. 在生产环境中使用Compose 【翻译】
  3. C#从服务器下载文件的四种方式
  4. 【ES6 】ES6 解构赋值--数组解构赋值
  5. pthread 编程基础
  6. CSS用户界面样式之cursor/outline/resize
  7. 用Leangoo看板进行可视化的缺陷跟踪管理
  8. 如何使用Chrome开发者工具找到Marketing Cloud某个contact的guid
  9. 如何将公式插入到word
  10. 从Windows文件夹到Linux分区