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解决鸡兔同笼问题的方法
Dec 20 Python
Python使用chardet判断字符编码
May 09 Python
python二分查找算法的递归实现方法
May 12 Python
分享几道你可能遇到的python面试题
Jul 24 Python
python虚拟环境virtualenv的使用教程
Oct 20 Python
解决python3中解压zip文件是文件名乱码的问题
Mar 22 Python
Python爬虫爬取新浪微博内容示例【基于代理IP】
Aug 03 Python
Django时区详解
Jul 24 Python
Django 大文件下载实现过程解析
Aug 01 Python
Python自动化之UnitTest框架实战记录
Sep 08 Python
Python SMTP发送电子邮件的示例
Sep 23 Python
python 实现学生信息管理系统的示例
Nov 28 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 缓存实现代码及详细注释
2010/05/16 PHP
PHP explode()函数用法、切分字符串
2012/10/03 PHP
PHP Try-catch 语句使用技巧
2016/02/28 PHP
php metaphone()函数的定义和用法
2016/05/15 PHP
PHP反射原理与用法深入分析
2019/09/28 PHP
node.js中的path.dirname方法使用说明
2014/12/09 Javascript
jQuery的css()方法用法实例
2014/12/24 Javascript
jQuery实现拖动调整表格单元格大小的代码实例
2015/01/13 Javascript
使用AngularJS对路由进行安全性处理的方法
2015/06/18 Javascript
JavaScript设计模式之单体模式全面解析
2016/09/09 Javascript
react高阶组件经典应用之权限控制详解
2017/09/07 Javascript
基于Vue渲染与插件的加载顺序的问题详解
2018/03/05 Javascript
vue 开发一个按钮组件的示例代码
2018/03/27 Javascript
使用Angular 6创建各种动画效果的方法
2018/10/10 Javascript
微信小程序拍照和摄像功能实现方法示例
2019/02/01 Javascript
[35:44]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG
2014/05/26 DOTA
[04:11]DOTA2亚洲邀请赛小组赛第一日 TOP10精彩集锦
2015/01/30 DOTA
python使用knn实现特征向量分类
2018/12/26 Python
python 读取鼠标点击坐标的实例
2018/12/29 Python
python for 循环获取index索引的方法
2019/02/01 Python
为什么你还不懂得怎么使用Python协程
2019/05/13 Python
python反编译学习之字节码详解
2019/05/19 Python
python numpy实现文件存取的示例代码
2019/05/26 Python
pyqt5 tablewidget 利用线程动态刷新数据的方法
2019/06/17 Python
利用python开发app实战的方法
2019/07/09 Python
Pygame的程序开始示例代码
2020/05/07 Python
Win10环境中如何实现python2和python3并存
2020/07/20 Python
Python如何实现远程方法调用
2020/08/07 Python
你不知道的5个HTML5新功能
2016/06/28 HTML / CSS
Skip Hop官网:好莱坞宝宝挚爱品牌
2018/06/17 全球购物
波兰电子产品购物网站:Vobis
2019/05/26 全球购物
Talbots官网:美国成熟女装品牌
2019/11/15 全球购物
介绍一下write命令
2012/09/24 面试题
学习十八大的心得体会
2014/09/12 职场文书
市场部经理岗位职责
2015/02/02 职场文书
护士实习自荐信
2015/03/06 职场文书