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压力测试代码
Feb 08 Python
pandas按若干个列的组合条件筛选数据的方法
Apr 11 Python
python和pygame实现简单俄罗斯方块游戏
Feb 19 Python
深入解析python中的实例方法、类方法和静态方法
Mar 11 Python
详解Python 多线程 Timer定时器/延迟执行、Event事件
Jun 27 Python
python3实现二叉树的遍历与递归算法解析(小结)
Jul 03 Python
查看端口并杀进程python脚本代码
Dec 17 Python
python接口自动化如何封装获取常量的类
Dec 24 Python
关于python 跨域处理方式详解
Mar 28 Python
浅谈Python中文件夹和python package包的区别
Jun 01 Python
Python基于yaml文件配置logging日志过程解析
Jun 23 Python
Pycharm 如何一键加引号的方法步骤
Feb 05 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
收集的DedeCMS一些使用经验
2007/03/17 PHP
Wordpress php 分页代码
2009/10/21 PHP
PHP中的string类型使用说明
2010/07/27 PHP
php实现登陆模块功能示例
2016/10/20 PHP
完美解决JS中汉字显示乱码问题(已解决)
2006/12/27 Javascript
基于jquery的关于动态创建DOM元素的问题
2010/12/24 Javascript
JavaScript中的排序算法代码
2011/02/22 Javascript
使用js写的一个简易的投票
2013/11/27 Javascript
Jquery响应回车键直接提交表单操作代码
2014/07/25 Javascript
Nodejs学习笔记之测试驱动
2015/04/16 NodeJs
jquery实现鼠标点击后展开列表内容的导航栏效果
2015/09/14 Javascript
JavaScript中的Array 对象(数组对象)
2016/06/02 Javascript
JavaScript中全选、全不选、反选、无刷新删除、批量删除、即点即改入库(在yii框架中操作)的代码分享
2016/11/01 Javascript
Node.js和Express简单入门介绍
2017/03/24 Javascript
详解Windows下安装Nodejs步骤
2017/05/18 NodeJs
JavaScript中关于class的调用方法
2017/11/28 Javascript
Bootstrap 模态框多次显示后台提交多次BUG的解决方法
2017/12/26 Javascript
小程序实现搜索框功能
2020/03/26 Javascript
vue移动端城市三级联动组件使用详解
2019/07/26 Javascript
js实现简单五子棋游戏
2020/05/28 Javascript
jQuery cookie的公共方法封装和使用示例
2020/06/01 jQuery
整理Python中的赋值运算符
2015/05/13 Python
Django imgareaselect手动剪切头像实现方法
2015/05/26 Python
Python中super的用法实例
2015/05/28 Python
Python使用redis pool的一种单例实现方式
2016/04/16 Python
基于hashlib模块--加密(详解)
2017/06/21 Python
PyTorch中常用的激活函数的方法示例
2019/08/20 Python
tensorflow模型保存、加载之变量重命名实例
2020/01/21 Python
美国领先的个性化礼品商城:Personalization Mall
2019/07/27 全球购物
俄罗斯玩具、儿童用品、儿童服装和鞋子网上商店:MyToys.ru
2019/10/14 全球购物
全球最受追捧的运动服品牌领先数字目的地:Stylerunner
2020/11/25 全球购物
行政前台岗位职责
2013/12/04 职场文书
高一物理教学反思
2014/01/24 职场文书
幼儿园大班毕业感言
2014/02/06 职场文书
高二学生评语大全
2014/04/25 职场文书
研究生导师评语
2014/12/31 职场文书