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 相关文章推荐
python3.3实现乘法表示例
Feb 07 Python
python语言使用技巧分享
May 31 Python
浅谈Python 对象内存占用
Jul 15 Python
python3基于TCP实现CS架构文件传输
Jul 28 Python
python查看模块安装位置的方法
Oct 16 Python
Python中正则表达式的用法总结
Feb 22 Python
Python Django基础二之URL路由系统
Jul 18 Python
Python3进制之间的转换代码实例
Aug 24 Python
在pytorch中实现只让指定变量向后传播梯度
Feb 29 Python
Python关键字及可变参数*args,**kw原理解析
Apr 04 Python
解决python 虚拟环境删除包无法加载的问题
Jul 13 Python
【超详细】八大排序算法的各项比较以及各自特点
Mar 31 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取进制余数函数代码
2012/01/19 PHP
PHP正则匹配操作简单示例【preg_match_all应用】
2017/07/10 PHP
详解PHP的抽象类和抽象方法以及接口总结
2019/03/15 PHP
如果文字过长,则将过长的部分变成省略号显示
2006/06/26 Javascript
讲两件事:1.this指针的用法小探. 2.ie的attachEvent和firefox的addEventListener在事件处理上的区别
2007/04/12 Javascript
Document对象内容集合(比较全)
2010/09/06 Javascript
js网页右下角提示框实例
2014/10/14 Javascript
jQuery模仿京东/天猫商品左侧分类导航菜单效果
2016/06/29 Javascript
JS实现获取来自百度,Google,soso,sogou关键词的方法
2016/12/21 Javascript
js实现下一页页码效果
2017/03/07 Javascript
$.browser.msie 为空或不是对象问题的多种解决方法
2017/03/19 Javascript
jQuery Ajax使用FormData上传文件和其他数据后端web.py获取
2017/06/11 jQuery
JavaScript用200行代码制作打飞机小游戏实例
2017/06/21 Javascript
详解使用nvm安装node.js
2017/07/18 Javascript
Express的HTTP重定向到HTTPS的方法
2018/06/06 Javascript
koa2实现登录注册功能的示例代码
2018/12/03 Javascript
JavaScript ES6常用基础知识总结
2019/02/09 Javascript
JavaScript实现旋转木马轮播图
2020/03/16 Javascript
python实现寻找最长回文子序列的方法
2018/06/02 Python
Python多线程同步---文件读写控制方法
2019/02/12 Python
Django重置migrations文件的方法步骤
2019/05/01 Python
Python函数装饰器原理与用法详解
2019/08/16 Python
Python描述符descriptor使用原理解析
2020/03/21 Python
在spyder IPython console中,运行代码加入参数的实例
2020/04/20 Python
详解H5 活动页之移动端 REM 布局适配方法
2017/12/07 HTML / CSS
加拿大建筑和装修专家:Reno-Depot
2017/12/21 全球购物
Nike瑞士官网:Nike CH
2021/01/18 全球购物
大班开学家长寄语
2014/04/04 职场文书
运动会400米加油稿(8篇)
2014/09/22 职场文书
2015年教师自我评价范文
2015/03/04 职场文书
2015年上半年计生工作总结
2015/03/30 职场文书
学生检讨书怎么写
2015/05/07 职场文书
圣贤教育改变命运观后感
2015/06/16 职场文书
护理工作心得体会
2016/01/22 职场文书
Sql Server之数据类型详解
2022/02/28 SQL Server