Python实现的redis分布式锁功能示例


Posted in Python onMay 29, 2018

本文实例讲述了Python实现的redis分布式锁功能。分享给大家供大家参考,具体如下:

#!/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):
    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):
    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 %s called [%s]."%(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():
  print "myfunc() called."
  time.sleep(20)
if __name__ == "__main__":
  myfunc()

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python 随机生成中文验证码的实例代码
Mar 20 Python
Python函数嵌套实例
Sep 23 Python
Python2.x和3.x下maketrans与translate函数使用上的不同
Apr 13 Python
深入理解Python中命名空间的查找规则LEGB
Aug 06 Python
python字符串str和字节数组相互转化方法
Mar 18 Python
用python实现对比两张图片的不同
Feb 05 Python
从DataFrame中提取出Series或DataFrame对象的方法
Nov 10 Python
详解Python with/as使用说明
Dec 13 Python
django页面跳转问题及注意事项
Jul 18 Python
python集合常见运算案例解析
Oct 17 Python
pymysql之cur.fetchall() 和cur.fetchone()用法详解
May 15 Python
Python xmltodict模块安装及代码实例
Oct 05 Python
Python计算一个给定时间点前一个月和后一个月第一天的方法
May 29 #Python
PyTorch CNN实战之MNIST手写数字识别示例
May 29 #Python
Python根据指定日期计算后n天,前n天是哪一天的方法
May 29 #Python
python 将md5转为16字节的方法
May 29 #Python
python 利用栈和队列模拟递归的过程
May 29 #Python
查看django执行的sql语句及消耗时间的两种方法
May 29 #Python
让Django支持Sql Server作后端数据库的方法
May 29 #Python
You might like
深入PHP操作MongoDB的技术总结
2013/06/02 PHP
PHP实现数组递归转义的方法
2014/08/28 PHP
ucenter通信原理分析
2015/01/09 PHP
smarty简单应用实例
2015/11/03 PHP
PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码
2016/03/25 PHP
Laravel如何友好的修改.env配置文件详解
2017/06/07 PHP
记录几个javascript有关的小细节
2007/04/02 Javascript
JavaScript 对象成员的可见性说明
2009/10/16 Javascript
JavaScript中常见陷阱小结
2010/04/27 Javascript
JS随机漂浮广告代码具体实例
2013/11/19 Javascript
JavaScript事件委托的技术原理探讨示例
2014/04/17 Javascript
JavaScript中实现PHP的打乱数组函数shuffle实例
2014/10/11 Javascript
jQuery实现监控页面所有ajax请求的方法
2015/12/10 Javascript
jQuery组件easyui基本布局实现代码
2016/08/25 Javascript
jQuery动态增减行的实例代码解析(推荐)
2016/12/05 Javascript
详解vue父子模版嵌套案例
2017/03/04 Javascript
基于Node.js的WebSocket通信实现
2017/03/11 Javascript
在使用JSON格式处理数据时应该注意的问题小结
2017/05/20 Javascript
js自定义input文件上传样式
2018/10/26 Javascript
详解在React项目中安装并使用Less(用法总结)
2019/03/18 Javascript
详解js获取video任意时间的画面截图
2019/04/17 Javascript
JS写滑稽笑脸运动效果
2020/05/28 Javascript
深入理解Python分布式爬虫原理
2017/11/23 Python
详解tensorflow训练自己的数据集实现CNN图像分类
2018/02/07 Python
python3 tcp的粘包现象和解决办法解析
2019/12/09 Python
python3.6使用SMTP协议发送邮件
2020/05/20 Python
CSS3制作Dropdown下拉菜单的方法
2015/07/18 HTML / CSS
科颜氏美国官网:Kiehl’s美国
2017/01/31 全球购物
查找廉价航班和发现新目的地:Kiwi.com
2019/02/25 全球购物
与世界上最好的跑步专业品牌合作:Fleet Feet
2019/03/22 全球购物
Desigual美国官方网站:西班牙服装品牌
2019/03/29 全球购物
试用期转正鉴定评语
2014/01/27 职场文书
医学院毕业生自荐信范文
2014/03/06 职场文书
工资证明格式模板
2015/06/12 职场文书
致创业的您:这类人不适合餐饮创业
2019/08/19 职场文书
用python自动生成日历
2021/04/24 Python