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实现的解析crontab配置文件代码
Jun 30 Python
记一次python 内存泄漏问题及解决过程
Nov 29 Python
对python:print打印时加u的含义详解
Dec 15 Python
python调用支付宝支付接口流程
Aug 15 Python
解决python多行注释引发缩进错误的问题
Aug 23 Python
Python3离线安装Requests模块问题
Oct 13 Python
kafka-python 获取topic lag值方式
Dec 23 Python
python中的逆序遍历实例
Dec 25 Python
PyCharm刷新项目(文件)目录的实现
Feb 14 Python
Python如何实现的二分查找算法
May 27 Python
python 多线程死锁问题的解决方案
Aug 25 Python
Python软件包安装的三种常见方法
Jul 07 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
PHP脚本中include文件出错解决方法
2008/11/20 PHP
php删除与复制文件夹及其文件夹下所有文件的实现代码
2013/01/23 PHP
mongo Table类文件 获取MongoCursor(游标)的实现方法分析
2013/07/01 PHP
PHP使用glob方法遍历文件夹下所有文件的实例
2018/10/17 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
JavaScipt基本教程之前言
2008/01/16 Javascript
Jquery从头学起第四讲 jquery入门教程
2010/08/01 Javascript
JS 使用for循环遍历子节点查找元素
2014/09/06 Javascript
浅析JS原型继承与类的继承
2016/04/07 Javascript
Bootstrap编写导航栏和登陆框
2016/05/30 Javascript
基于pako.js实现gzip的压缩和解压功能示例
2017/06/13 Javascript
深入浅析javascript继承体系
2017/10/23 Javascript
js运算符的一些特殊用法
2018/07/29 Javascript
简述vue状态管理模式之vuex
2018/08/29 Javascript
javascript中join方法实例讲解
2019/02/21 Javascript
Vue.js标签页组件使用方法详解
2019/10/19 Javascript
vue设置动态请求地址的例子
2019/11/01 Javascript
微信小游戏中three.js离屏画布的示例代码
2020/10/12 Javascript
[02:16]深扒TI7聊天轮盘语音出处2
2017/05/11 DOTA
简述Python中的进程、线程、协程
2016/03/18 Python
Python实现字符串格式化的方法小结
2017/02/20 Python
Python实现感知器模型、两层神经网络
2017/12/19 Python
jupyter notebook参数化运行python方式
2020/04/10 Python
浅析CSS3 中的 transition,transform,translate之间区别和作用
2020/03/26 HTML / CSS
德国狗狗用品在线商店:Schecker
2017/03/17 全球购物
美国宠物美容和宠物用品购物网站:Cherrybrook
2018/12/07 全球购物
护士自我介绍信
2014/01/13 职场文书
加拿大留学自荐信
2014/01/28 职场文书
小学生环保倡议书
2014/05/15 职场文书
大学生党员个人剖析材料
2014/10/08 职场文书
预备党员转正材料
2014/12/19 职场文书
集结号观后感
2015/06/08 职场文书
德能勤绩工作总结
2015/08/11 职场文书
css display table 自适应高度、宽度问题的解决
2021/05/07 HTML / CSS
Python如何配置环境变量详解
2021/05/18 Python
python前后端自定义分页器
2022/04/13 Python