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之让人欢喜让人忧的迭代
Oct 02 Python
python通过get,post方式发送http请求和接收http响应的方法
May 26 Python
举例详解Python中yield生成器的用法
Aug 05 Python
详解python进行mp3格式判断
Dec 23 Python
python使用turtle库与random库绘制雪花
Jun 22 Python
django实现支付宝支付实例讲解
Oct 17 Python
Python生态圈图像格式转换问题(推荐)
Dec 02 Python
Python yield生成器和return对比代码实例
Apr 20 Python
500行python代码实现飞机大战
Apr 24 Python
Kmeans均值聚类算法原理以及Python如何实现
Sep 26 Python
浅谈Python从全局与局部变量到装饰器的相关知识
Jun 21 Python
python中 Flask Web 表单的使用方法
May 20 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
虹吸式咖啡壶操作
2021/03/03 冲泡冲煮
php中文字母数字验证码实现代码
2008/04/25 PHP
php生成EAN_13标准条形码实例
2013/11/13 PHP
PHP使用GIFEncoder类处理gif图片实例
2014/07/01 PHP
慎用 somefunction.prototype 分析
2009/06/02 Javascript
JavaScript 权威指南(第四版) 读书笔记
2009/08/11 Javascript
比较搞笑的js陷阱题
2010/02/07 Javascript
javascript限制文本框输入值类型的方法
2015/05/07 Javascript
跟我学习javascript的基本类型和引用类型
2015/11/16 Javascript
浅析JS动态创建元素【两种方法】
2016/04/20 Javascript
react-native 完整实现登录功能的示例代码
2017/09/11 Javascript
vue proxyTable 接口跨域请求调试的示例
2017/09/12 Javascript
NodeJS实现自定义流的方法
2018/08/01 NodeJs
vue组件通信传值操作示例
2019/01/08 Javascript
layui 弹出层回调获取弹出层数据的例子
2019/09/02 Javascript
p5.js码绘“跳动的小正方形”的实现代码
2019/10/22 Javascript
在vs code 中如何创建一个自己的 Vue 模板代码
2020/11/10 Javascript
js面向对象封装级联下拉菜单列表的实现步骤
2021/02/08 Javascript
举例讲解Python中字典的合并值相加与异或对比
2016/06/04 Python
python 3.6 +pyMysql 操作mysql数据库(实例讲解)
2017/12/20 Python
Windows下PyCharm2018.3.2 安装教程(图文详解)
2019/10/24 Python
Python笔记之观察者模式
2019/11/20 Python
在OpenCV里使用Camshift算法的实现
2019/11/22 Python
python3连接mysql获取ansible动态inventory脚本
2020/01/19 Python
如何教少儿学习Python编程
2020/07/10 Python
HTML5资源预加载(Link prefetch)详细介绍(给你的网页加速)
2014/05/07 HTML / CSS
意大利奢侈品牌在线精品店:Jole.it
2020/11/23 全球购物
公司董事长职责
2013/12/12 职场文书
销售主管岗位职责范本
2014/02/14 职场文书
《落花生》教学反思
2014/02/25 职场文书
食品采购员岗位职责
2014/04/14 职场文书
家长对学生的评语
2014/04/18 职场文书
五一活动标语
2014/06/30 职场文书
寝室长工作失责检讨书
2014/10/06 职场文书
农业生产宣传标语
2014/10/08 职场文书
mysql数据库如何转移到oracle
2022/12/24 MySQL