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内置的HTTP协议服务器SimpleHTTPServer使用指南
Mar 30 Python
python中matplotlib实现最小二乘法拟合的过程详解
Jul 11 Python
Python读取MRI并显示为灰度图像实例代码
Jan 03 Python
浅析python协程相关概念
Jan 20 Python
Python中协程用法代码详解
Feb 10 Python
Python中一行和多行import模块问题
Apr 01 Python
Python实现读取字符串按列分配后按行输出示例
Apr 17 Python
tensorflow 利用expand_dims和squeeze扩展和压缩tensor维度方式
Feb 07 Python
基于Python爬取爱奇艺资源过程解析
Mar 02 Python
Python实现猜年龄游戏代码实例
Mar 25 Python
Python 实现二叉查找树的示例代码
Dec 21 Python
Python中requests做接口测试的方法
May 30 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
QueryPath PHP 中的jQuery
2010/04/11 PHP
PHP隐形一句话后门,和ThinkPHP框架加密码程序(base64_decode)
2011/11/02 PHP
md5 16位二进制与32位字符串相互转换示例
2013/12/30 PHP
浅析php原型模式
2014/11/25 PHP
php外部执行命令函数用法小结
2016/10/11 PHP
PHP PDO和消息队列的个人理解与应用实例分析
2019/11/25 PHP
Javascript 实用小技巧
2010/04/07 Javascript
8款非常棒的响应式jQuery 幻灯片插件推荐
2012/02/02 Javascript
js中的json对象详细介绍
2014/10/29 Javascript
JavaScript中的setMilliseconds()方法使用详解
2015/06/11 Javascript
浅谈Node.js中的定时器
2015/06/18 Javascript
js实现html table 行,列锁定的简单实例
2016/10/13 Javascript
jQuery弹出div层过2秒自动消失
2016/11/29 Javascript
jQuery实现jQuery-form.js实现异步上传文件
2017/04/28 jQuery
react系列从零开始_简单谈谈react
2017/07/06 Javascript
详解使用路由延迟加载 Angular 模块
2017/10/12 Javascript
解决vue中使用swiper插件问题及swiper在vue中的用法
2018/04/04 Javascript
swiper.js插件实现pc端文本上下滑动功能示例
2018/12/03 Javascript
使用Angular自定义字段校验指令的方法示例
2019/02/01 Javascript
Vue如何基于vue-i18n实现多国语言兼容
2020/07/17 Javascript
vue项目实现设置根据路由高亮对应的菜单项操作
2020/08/06 Javascript
[01:34]DOTA2 7.22版本新增神杖效果一览(敏捷英雄篇)
2019/05/28 DOTA
itchat接口使用示例
2017/10/23 Python
Python二叉树的遍历操作示例【前序遍历,中序遍历,后序遍历,层序遍历】
2018/12/24 Python
pyqt5实现登录界面的模板
2020/05/30 Python
python里 super类的工作原理详解
2019/06/19 Python
Python3操作Excel文件(读写)的简单实例
2019/09/02 Python
Python下使用Trackbar实现绘图板
2020/10/27 Python
国际鲜花速递专家:Floraqueen
2016/11/24 全球购物
Omio法国:全欧洲低价大巴、火车和航班搜索和比价
2017/11/13 全球购物
Lacoste澳大利亚官网:服装、鞋类及配饰
2018/11/14 全球购物
法学院方阵解说词
2014/01/29 职场文书
人事任命书格式
2014/06/05 职场文书
会计主管岗位职责
2015/04/02 职场文书
婚庆公司开业主持词
2015/06/30 职场文书
2015年新教师个人工作总结
2015/10/14 职场文书