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中__getattr__和 __getattribute__获取属性的用法
Jun 21 Python
python中的闭包函数
Feb 09 Python
Python过滤txt文件内重复内容的方法
Oct 21 Python
python在新的图片窗口显示图片(图像)的方法
Jul 11 Python
Django文件存储 默认存储系统解析
Aug 02 Python
基于python实现雪花算法过程详解
Nov 16 Python
Python打开文件、文件读写操作、with方式、文件常用函数实例分析
Jan 07 Python
将labelme格式数据转化为标准的coco数据集格式方式
Feb 17 Python
使用K.function()调试keras操作
Jun 17 Python
Python实现列表索引批量删除的5种方法
Nov 16 Python
python Tkinter的简单入门教程
Apr 11 Python
Matplotlib绘制条形图的方法你知道吗
Mar 21 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的ASP防火墙
2006/10/09 PHP
jQuery 1.0.2
2006/10/11 Javascript
修改jQuery Validation里默认的验证方法
2012/02/14 Javascript
jquery ajax提交整个表单元素的快捷办法
2013/03/27 Javascript
Jquery实现自定义窗口随意的拖拽
2014/03/12 Javascript
javaScript如何处理从java后台返回的list
2014/04/24 Javascript
JS面向对象基础讲解(工厂模式、构造函数模式、原型模式、混合模式、动态原型模式)
2014/08/16 Javascript
快速学习AngularJs HTTP响应拦截器
2015/12/31 Javascript
jQuery中判断对象是否存在的方法汇总
2016/02/24 Javascript
nodejs搭建本地服务器并访问文件的方法
2017/03/03 NodeJs
微信小程序 页面传值详解
2017/03/10 Javascript
详解基于 Nuxt 的 Vue.js 服务端渲染实践
2017/10/24 Javascript
深入理解JavaScript的值传递和引用传递
2018/10/24 Javascript
通过说明与示例了解js五种设计模式
2019/06/17 Javascript
js全屏事件fullscreenchange 实现全屏、退出全屏操作
2019/09/17 Javascript
Webpack中SplitChunksPlugin 配置参数详解
2020/03/24 Javascript
vue动态合并单元格并添加小计合计功能示例
2020/11/26 Vue.js
python简单程序读取串口信息的方法
2015/03/13 Python
python中通过预先编译正则表达式提高效率
2017/09/25 Python
浅谈Python由__dict__和dir()引发的一些思考
2017/10/30 Python
python3实现磁盘空间监控
2018/06/21 Python
Python logging模块用法示例
2018/08/28 Python
python实现飞机大战微信小游戏
2020/03/21 Python
Python如何输出警告信息
2020/07/30 Python
Python QT组件库qtwidgets的使用
2020/11/02 Python
HTML5 history新特性pushState、replaceState及两者的区别
2015/12/26 HTML / CSS
Russell Stover巧克力官方网站:美国领先的精美巧克力制造商
2016/11/27 全球购物
个人自我评价范文
2014/02/05 职场文书
新教师培训心得体会
2014/09/02 职场文书
毕业纪念册寄语大全
2015/02/26 职场文书
2015年语文教师工作总结
2015/05/25 职场文书
在校生证明
2015/06/17 职场文书
PyQt5 QThread倒计时功能的实现代码
2021/04/02 Python
详细了解java监听器和过滤器
2021/07/09 Java/Android
Log4j.properties配置及其使用
2021/08/02 Java/Android
mysql下的max_allowed_packet参数设置详解
2022/02/12 MySQL