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新手经常遇到的17个错误分析
Jul 30 Python
利用Python中unittest实现简单的单元测试实例详解
Jan 09 Python
Python 专题二 条件语句和循环语句的基础知识
Mar 19 Python
Python入门之三角函数tan()函数实例详解
Nov 08 Python
python3 破解 geetest(极验)的滑块验证码功能
Feb 24 Python
python实现移位加密和解密
Mar 22 Python
python 对字典按照value进行排序的方法
May 09 Python
python变量命名的7条建议
Jul 04 Python
OpenCV哈里斯(Harris)角点检测的实现
Jan 15 Python
解决echarts中饼图标签重叠的问题
May 16 Python
Python+pyftpdlib实现局域网文件互传
Aug 24 Python
详解python命令提示符窗口下如何运行python脚本
Sep 11 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源代码数组统计count分析
2011/08/02 PHP
header跳转和include包含问题详解
2012/09/08 PHP
对淘宝URL中ID提取的PHP代码
2013/09/01 PHP
Zend Framework+smarty用法实例详解
2016/03/19 PHP
JavaScript方法和技巧大全
2006/12/27 Javascript
location.href语句与火狐不兼容的问题
2010/07/04 Javascript
js String对象中常用方法小结(字符串操作)
2012/01/27 Javascript
jquery中ready()函数执行的时机和window的load事件比较
2015/06/22 Javascript
Jquery+ajax+JAVA(servlet)实现下拉菜单异步取值
2016/03/23 Javascript
Bootstrap table分页问题汇总
2016/05/30 Javascript
Angular2中Bootstrap界面库ng-bootstrap详解
2016/10/18 Javascript
基于Vuejs框架实现翻页组件
2020/06/29 Javascript
Angular2使用Guard和Resolve进行验证和权限控制
2017/04/24 Javascript
详解webpack解惑:require的五种用法
2017/06/09 Javascript
[01:54]TI珍贵瞬间系列(五):压力
2020/08/29 DOTA
Python中使用SAX解析xml实例
2014/11/21 Python
Python中的tuple元组详细介绍
2015/02/02 Python
全面解析Python的While循环语句的使用方法
2015/10/13 Python
Python使用win32com模块实现数据库表结构自动生成word表格的方法
2018/07/17 Python
python实现的生成word文档功能示例
2019/08/23 Python
Python3 中作为一等对象的函数解析
2019/12/11 Python
python3.9实现pyinstaller打包python文件成exe
2020/12/13 Python
关于canvas.toDataURL 在iOS运行失败的问题解决
2020/09/16 HTML / CSS
Nike法国官方网站:Nike.com FR
2018/07/22 全球购物
Redbubble法国:由独立艺术家设计的独特产品
2019/01/08 全球购物
自主招生自荐信范文
2013/12/04 职场文书
业务部经理岗位职责
2014/01/04 职场文书
市三好学生主要事迹
2014/01/28 职场文书
标准的毕业生自荐信
2014/04/20 职场文书
管理建议书范文
2014/05/13 职场文书
银行转正自我鉴定
2014/09/29 职场文书
社区班子个人对照检查材料思想汇报
2014/10/07 职场文书
创先争优宣传标语
2014/10/08 职场文书
2014年图书室工作总结
2014/12/09 职场文书
拾金不昧表扬稿
2015/01/16 职场文书
mysql 乱码 字符集latin1转UTF8
2022/04/19 MySQL