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实现简单的四则运算计算器
Nov 02 Python
浅谈Python中带_的变量或函数命名
Dec 04 Python
Python中django学习心得
Dec 06 Python
Python编程求解二叉树中和为某一值的路径代码示例
Jan 04 Python
python_opencv用线段画封闭矩形的实例
Dec 05 Python
python使用rsa非对称加密过程解析
Dec 28 Python
python批量修改xml属性的实现方式
Mar 05 Python
PyQt5事件处理之定时在控件上显示信息的代码
Mar 25 Python
jenkins+python自动化测试持续集成教程
May 12 Python
python爬虫请求头设置代码
Jul 28 Python
Opencv中cv2.floodFill算法的使用
Jun 18 Python
Python基本的内置数据类型及使用方法
Apr 13 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 深入理解strtotime函数的使用详解
2013/05/23 PHP
php获取客户端电脑屏幕参数的方法
2015/01/09 PHP
PHP Yaf框架的简单安装使用教程(推荐)
2016/06/08 PHP
PHP查看SSL证书信息的方法
2016/09/22 PHP
一个轻量级的javascript库 pj介绍
2010/12/19 Javascript
jQuery使用ajaxSubmit()提交表单示例
2014/04/04 Javascript
JavaScript中的Math.E属性使用详解
2015/06/12 Javascript
jquery实现的蓝色二级导航条效果代码
2015/08/24 Javascript
基于JavaScript实现手机短信按钮倒计时(超简单)
2015/12/30 Javascript
JavaScript事件学习小结(一)事件流
2016/06/09 Javascript
jquery实现ajax加载超时提示的方法
2016/07/23 Javascript
JavaScript数组操作详解
2017/02/04 Javascript
Angularjs实现下拉框联动的示例代码
2017/08/22 Javascript
JS实现简单的浮动碰撞效果示例
2017/12/28 Javascript
jQuery设置下拉框显示与隐藏效果的方法分析
2019/09/15 jQuery
vue vantUI tab切换时 list组件不触发load事件的问题及解决方法
2020/02/14 Javascript
Python打印斐波拉契数列实例
2015/07/07 Python
Python数据分析之双色球统计单个红和蓝球哪个比例高的方法
2018/02/03 Python
python使用__slots__让你的代码更加节省内存
2018/09/05 Python
Python通用循环的构造方法实例分析
2018/12/19 Python
python 获取等间隔的数组实例
2019/07/04 Python
Python字典中的值为列表或字典的构造实例
2019/12/16 Python
Python求两个字符串最长公共子序列代码实例
2020/03/05 Python
python3 正则表达式基础廖雪峰
2020/03/25 Python
使用CSS3制作一个简单的Chrome模拟器
2015/07/15 HTML / CSS
如何用Lucene索引数据库
2016/02/23 面试题
金属材料工程毕业生个人的自我评价
2013/11/28 职场文书
毕业生就业推荐信范文
2013/12/01 职场文书
校班主任推荐信范文
2013/12/03 职场文书
英语教师自荐信
2014/05/26 职场文书
小组名称和口号
2014/06/09 职场文书
大型主题婚礼活动策划方案
2014/09/15 职场文书
2014小学一年级班主任工作总结
2014/12/05 职场文书
员工2014年度工作总结
2014/12/09 职场文书
MySQL时间盲注的五种延时方法实现
2021/05/18 MySQL
Python可视化学习之seaborn绘制矩阵图详解
2022/02/24 Python