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之入门(四)运算
May 27 Python
Python获取Linux系统下的本机IP地址代码分享
Nov 07 Python
python变量不能以数字打头详解
Jul 06 Python
Python 运行.py文件和交互式运行代码的区别详解
Jul 02 Python
django重新生成数据库中的某张表方法
Aug 28 Python
Python实现的爬取豆瓣电影信息功能案例
Sep 15 Python
python实现图片二值化及灰度处理方式
Dec 07 Python
django xadmin action兼容自定义model权限教程
Mar 30 Python
keras topN显示,自编写代码案例
Jul 03 Python
conda安装tensorflow和conda常用命令小结
Feb 20 Python
python实现黄金分割法的示例代码
Apr 28 Python
python 爬取吉首大学网站成绩单
Jun 02 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 miniBB中文乱码问题解决方法
2008/11/25 PHP
PHP foreach遍历多维数组实现方式
2016/11/16 PHP
Exjs 入门篇
2010/04/07 Javascript
JQuery select标签操作代码段
2010/05/16 Javascript
javascript innerHTML使用分析
2010/12/03 Javascript
jQuery学习笔记(2)--用jquery实现各种模态提示框代码及项目构架
2013/04/08 Javascript
nodejs教程之异步I/O
2014/11/21 NodeJs
React Native预设占位placeholder的使用
2017/09/28 Javascript
javascript数组定义的几种方法
2017/10/06 Javascript
原生js实现省市区三级联动代码分享
2018/02/12 Javascript
详解Javascript中new()到底做了些什么?
2018/03/29 Javascript
Vue2.0中三种常用传值方式(父传子、子传父、非父子组件传值)
2018/08/16 Javascript
对VUE中的对象添加属性
2018/09/18 Javascript
深入浅析js原型链和vue构造函数
2018/10/25 Javascript
[10:07]2014DOTA2国际邀请赛 实拍选手现场观战DK对阵Titan
2014/07/12 DOTA
学习python (1)
2006/10/31 Python
KMP算法精解及其Python版的代码示例
2016/06/01 Python
Python实现的排列组合计算操作示例
2017/10/13 Python
对python 判断数字是否小于0的方法详解
2019/01/26 Python
tensorflow的计算图总结
2020/01/12 Python
tensorflow使用L2 regularization正则化修正overfitting过拟合方式
2020/05/22 Python
浅析HTML5中的 History 模式
2017/06/22 HTML / CSS
DC Shoes官网:美国滑板鞋和服饰品牌
2017/09/03 全球购物
JackJones官方旗舰店:杰克琼斯男装
2018/03/27 全球购物
Booking.com西班牙:全球酒店预订
2018/03/30 全球购物
英国奢侈品牌时尚购物平台:Farfetch(支持中文)
2020/02/18 全球购物
生物化学研究助理员求职信
2013/10/09 职场文书
质量负责人任命书
2014/06/06 职场文书
土地租赁意向书
2014/07/30 职场文书
天下第一关导游词
2015/02/06 职场文书
经典搞笑版检讨书
2015/02/19 职场文书
学雷锋团日活动总结
2015/05/06 职场文书
有关浪费资源的建议书
2015/09/14 职场文书
关于环保的广播稿
2015/12/17 职场文书
在K8s上部署Redis集群的方法步骤
2021/04/27 Redis
MySQL数据库Innodb 引擎实现mvcc锁
2022/05/06 MySQL