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 相关文章推荐
Django 路由系统URLconf的使用
Oct 11 Python
Python编写合并字典并实现敏感目录的小脚本
Feb 26 Python
Python学习笔记之pandas索引列、过滤、分组、求和功能示例
Jun 03 Python
Python列表对象实现原理详解
Jul 01 Python
python sorted函数的小练习及解答
Sep 18 Python
Python使用matplotlib绘制Logistic曲线操作示例
Nov 28 Python
python3 Scrapy爬虫框架ip代理配置的方法
Jan 17 Python
python解析xml文件方式(解析、更新、写入)
Mar 05 Python
基于jupyter代码无法在pycharm中运行的解决方法
Apr 21 Python
解决pyinstaller打包运行程序时出现缺少plotly库问题
Jun 02 Python
python 对一幅灰度图像进行直方图均衡化
Oct 27 Python
使用tensorflow 实现反向传播求导
May 26 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
收音机史话 - 1960年代前后的DIY
2021/03/02 无线电
php中Ioc(控制反转)和Di(依赖注入)
2017/05/07 PHP
Laravel事件监听器用法实例分析
2019/03/12 PHP
PHP基于session.upload_progress 实现文件上传进度显示功能详解
2019/08/09 PHP
基于php解决json_encode中文UNICODE转码问题
2020/11/10 PHP
JSON序列化与解析原生JS方法且IE6和chrome测试通过
2013/09/05 Javascript
javascript运行机制之this详细介绍
2014/02/07 Javascript
jquery对象和javascript对象即DOM对象相互转换
2014/08/07 Javascript
js实现div模拟模态对话框展现URL内容
2016/05/27 Javascript
详解使用nodeJs安装Vue-cli
2017/05/17 NodeJs
JavaScript 中调用 Kotlin 方法实例详解
2017/06/09 Javascript
利用JS对iframe父子(内外)页面进行操作的方法教程
2017/06/15 Javascript
vue编译打包本地查看index文件的方法
2018/02/23 Javascript
vue实现带复选框的树形菜单
2019/05/27 Javascript
JavaScript工具库之Lodash详解
2019/06/15 Javascript
vue实现分页栏效果
2019/06/28 Javascript
详解钉钉小程序组件之自定义模态框(弹窗封装实现)
2020/03/07 Javascript
原生js实现无缝轮播图效果
2021/01/28 Javascript
[36:16]完美世界DOTA2联赛PWL S3 access vs Rebirth 第一场 12.19
2020/12/24 DOTA
[01:50:49]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster BO3 第三场 1月24日
2021/03/11 DOTA
python 视频逐帧保存为图片的完整实例
2019/12/10 Python
tensorflow 获取所有variable或tensor的name示例
2020/01/04 Python
Pytorch mask_select 函数的用法详解
2020/02/18 Python
python 实现简易的记事本
2020/11/30 Python
css3实现垂直下拉动画菜单示例
2014/04/22 HTML / CSS
css3 border旋转时的动画应用
2016/01/22 HTML / CSS
html5 迷宫游戏(碰撞检测)实例一
2013/07/25 HTML / CSS
如何写一个自定义标签
2012/12/28 面试题
文科生自我鉴定
2014/02/15 职场文书
《天安门广场》教学反思
2014/04/23 职场文书
银行爱岗敬业演讲稿
2014/05/05 职场文书
高中综合实践活动总结
2014/07/07 职场文书
金融系毕业生自荐书
2014/07/08 职场文书
党员干部形式主义个人整改措施
2014/09/17 职场文书
先进党支部事迹材料
2014/12/24 职场文书
四群教育工作总结
2015/08/10 职场文书