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 开发Activex组件方法
Nov 08 Python
跟老齐学Python之集合(set)
Sep 24 Python
python使用多线程不断刷新网页的方法
Mar 31 Python
Python编写生成验证码的脚本的教程
May 04 Python
DataFrame 将某列数据转为数组的方法
Apr 13 Python
使用Python实现从各个子文件夹中复制指定文件的方法
Oct 25 Python
python版飞机大战代码分享
Nov 20 Python
Python字符串对象实现原理详解
Jul 01 Python
django中SMTP发送邮件配置详解
Jul 19 Python
python opencv将图片转为灰度图的方法示例
Jul 31 Python
解决jupyter notebook 前面书写后面内容消失的问题
Apr 13 Python
Python函数中apply、map、applymap的区别
Nov 27 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
Yii实现单用户博客系统文章详情页插入评论表单的方法
2015/12/28 PHP
PHP使用curl_multi_select解决curl_multi网页假死问题的方法
2018/08/15 PHP
Javascript模块模式分析
2008/05/16 Javascript
javascript 面向对象全新理练之数据的封装
2009/12/03 Javascript
javascript实现的在当前窗口中漂浮框的代码
2010/03/15 Javascript
javascript 基础篇1 什么是js 建立第一个js程序
2012/03/14 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 语法
2015/01/09 Javascript
JavaScript判断变量是否为数组的方法(Array)
2016/02/24 Javascript
JS实现table表格数据排序功能(可支持动态数据+分页效果)
2016/05/26 Javascript
JavaScript中自带的 reduce()方法使用示例详解
2016/08/10 Javascript
AngularJS实践之使用NgModelController进行数据绑定
2016/10/08 Javascript
详解javascript事件绑定使用方法
2016/10/20 Javascript
Angular在模板驱动表单中自定义校验器的方法
2017/08/09 Javascript
用react-redux实现react组件之间数据共享的方法
2018/06/08 Javascript
vue遍历生成的输入框 绑定及修改值示例
2019/10/30 Javascript
json_decode 索引为数字时自动排序问题解决方法
2020/03/28 Javascript
[01:56]生活中的妖精之七夕特别档
2016/08/09 DOTA
python正则表达式re模块详细介绍
2014/05/29 Python
Python构造函数及解构函数介绍
2015/02/26 Python
Django配置MySQL数据库的完整步骤
2019/09/07 Python
在Python中使用turtle绘制多个同心圆示例
2019/11/23 Python
Python数据存储之 h5py详解
2019/12/26 Python
Tensorflow 实现分批量读取数据
2020/01/04 Python
基于打开pycharm有带图片md文件卡死问题的解决
2020/04/24 Python
Python新手学习标准库模块命名
2020/05/29 Python
使用python编写一个语音朗读闹钟功能的示例代码
2020/07/14 Python
python实现杨辉三角的几种方法代码实例
2021/03/02 Python
详解css3 flex弹性盒自动铺满写法
2020/09/17 HTML / CSS
利用HTML5中的Canvas绘制一张笑脸的教程
2015/05/07 HTML / CSS
Laura官网:加拿大女性的顶级时尚目的地
2019/09/20 全球购物
奥地利票务门户网站:oeticket.com
2019/12/31 全球购物
村班子对照检查材料
2014/08/18 职场文书
2015年个人剖析材料范文
2014/12/29 职场文书
Redis之RedisTemplate配置方式(序列和反序列化)
2022/03/13 Redis
请求模块urllib之PYTHON爬虫的基本使用
2022/04/08 Python
Mysql开启外网访问
2022/05/15 MySQL