python如何使用Redis构建分布式锁


Posted in Python onJanuary 16, 2020

这篇文章主要介绍了python如何使用Redis构建分布式锁,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

在实际应用场景中,我们可能有多个worker,可能在一台机器,也可能分布在不同的机器,但只有一个worker可以同时持有一把锁,这个时候我们就需要用到分布式锁了。

这里推荐python的实现库,Redlock-py (Python 实现).

正常情况下,worker获得锁后,处理自己的任务,完成后自动释放持有的锁,是不是感觉有点熟悉,很容易想到我们的上下文管理器,这里我们简单的用装饰器实现 with...as... 语法。

安装Redlock-py

$ pip install redlock-py

使用python自带的 contextmanager 装饰器试下上下文管理

from contextlib import contextmanager
from redlock import Redlock

@contextmanager
def worker_lock_manager(key, ttl, **kwargs):
  """
  分布式锁
  :param key: 分布式锁ID
  :param ttl: 分布式锁生存时间
  :param kwargs: 可选参数字典
  :return: None
  """
  redis_servers = [{
    'host': '127.0.0.1',
    'port': 6379,
    'db': 0,
    'password': 'pwd'
  }]

  rlk= Redlock(redis_servers)

  # 获取锁
  lock = rlk.lock(key, ttl)
 
  yield lock

  # 释放锁
  rlk.unlock(lock)

如何使用呢

with worker_lock_manager('unique_key', 1000) as w_lock:
    if w_lock is False:
        return
    do_something()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
详解Python当中的字符串和编码
Apr 25 Python
放弃 Python 转向 Go语言有人给出了 9 大理由
Oct 20 Python
Python numpy实现数组合并实例(vstack,hstack)
Jan 09 Python
对Python 窗体(tkinter)文本编辑器(Text)详解
Oct 11 Python
解决Python下imread,imwrite不支持中文的问题
Dec 05 Python
pyqt5实现俄罗斯方块游戏
Jan 11 Python
python如何解析配置文件并应用到项目中
Jun 27 Python
Python如何优雅获取本机IP方法
Nov 10 Python
完美解决pyinstaller打包报错找不到依赖pypiwin32或pywin32-ctypes的错误
Apr 01 Python
python模拟实现分发扑克牌
Apr 22 Python
keras实现VGG16方式(预测一张图片)
Jul 07 Python
python下载的库包存放路径
Jul 27 Python
Python中url标签使用知识点总结
Jan 16 #Python
PyTorch的SoftMax交叉熵损失和梯度用法
Jan 15 #Python
pytorch方法测试——激活函数(ReLU)详解
Jan 15 #Python
pytorch的batch normalize使用详解
Jan 15 #Python
pytorch方法测试详解——归一化(BatchNorm2d)
Jan 15 #Python
Python 中@property的用法详解
Jan 15 #Python
Python字符串中删除特定字符的方法
Jan 15 #Python
You might like
傻瓜化配置PHP环境――Appserv
2006/12/13 PHP
基于python发送邮件的乱码问题的解决办法
2013/04/25 PHP
简单谈谈favicon
2015/06/10 PHP
PHP实现数组根据某个单元字段排序操作示例
2018/08/01 PHP
利用JQuery的load函数动态加载其它页面的内容的实现代码
2010/12/14 Javascript
window.addEventListener来解决让一个js事件执行多个函数
2012/12/26 Javascript
JavaScript动态插入CSS的方法
2015/12/10 Javascript
详解AngularJS中自定义过滤器
2015/12/28 Javascript
jQuery判断元素是否显示 是否隐藏的简单实现代码
2016/05/19 Javascript
在web中js实现类似excel的表格控件
2016/09/01 Javascript
Vue.js教程之axios与网络传输的学习实践
2017/04/29 Javascript
jQuery实现的简单手风琴效果示例
2018/08/29 jQuery
QML实现圆环颜色选择器
2019/09/25 Javascript
微信小程序仿抖音视频之整屏上下切换功能的实现代码
2020/05/24 Javascript
JavaScript实现图片放大预览效果
2020/11/02 Javascript
零基础写python爬虫之神器正则表达式
2014/11/06 Python
Python程序中的观察者模式结构编写示例
2016/05/27 Python
Python模拟登陆实现代码
2017/06/14 Python
Python基础之循环语句用法示例【for、while循环】
2019/03/23 Python
Django框架 Pagination分页实现代码实例
2019/09/04 Python
Python 正则表达式爬虫使用案例解析
2019/09/23 Python
Pycharm内置终端及远程SSH工具的使用教程图文详解
2020/03/19 Python
python调用API接口实现登陆短信验证
2020/05/10 Python
基于python实现破解滑动验证码过程解析
2020/05/28 Python
西班牙多品牌鞋店连锁店:Krack
2018/11/30 全球购物
King Apparel官网:英国街头服饰品牌
2019/09/05 全球购物
机电一体化自荐信
2013/12/10 职场文书
简历中的自我评价怎么写
2014/01/29 职场文书
生产部管理制度
2014/01/31 职场文书
毕业自我评价
2014/02/05 职场文书
企业办公室岗位职责
2014/03/12 职场文书
学习十八大宣传标语
2014/10/09 职场文书
2015年转正工作总结范文
2015/04/02 职场文书
2016年寒假家长评语
2015/10/10 职场文书
一文搞懂PHP中的抽象类和接口
2022/05/25 PHP
Pytorch中expand()的使用(扩展某个维度)
2022/07/15 Python