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实现apahce网站日志分析示例
Apr 02 Python
解析Python中的变量、引用、拷贝和作用域的问题
Apr 07 Python
使用简单工厂模式来进行Python的设计模式编程
Mar 01 Python
python字典的常用操作方法小结
May 16 Python
Flask实现图片的上传、下载及展示示例代码
Aug 03 Python
通过pykafka接收Kafka消息队列的方法
Dec 27 Python
python实现维吉尼亚加密法
Mar 20 Python
浅谈在django中使用redirect重定向数据传输的问题
Mar 13 Python
Pycharm内置终端及远程SSH工具的使用教程图文详解
Mar 19 Python
Django中的模型类设计及展示示例详解
May 29 Python
python线性插值解析
Jul 05 Python
Python爬虫Scrapy框架CrawlSpider原理及使用案例
Nov 20 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 文件编程综合案例-文件上传的实现
2013/07/03 PHP
php加密算法之实现可逆加密算法和解密分享
2014/01/21 PHP
PHP的Laravel框架中使用消息队列queue及异步队列的方法
2016/03/21 PHP
PHP插件PHPMailer发送邮件功能
2017/02/28 PHP
老生常谈PHP面向对象之标识映射
2017/06/21 PHP
JQuery入门——事件切换之hover()方法应用介绍
2013/02/05 Javascript
在JavaScript中typeof的用途介绍
2013/04/11 Javascript
JS文本获得焦点清除文本文字的示例代码
2014/01/13 Javascript
Javascript中typeof 用法小结
2015/05/12 Javascript
node.js+express制作网页计算器
2016/01/17 Javascript
JavaScript中闭包的写法和作用详解
2016/06/29 Javascript
js return返回多个值,通过对象的属性访问方法
2017/02/21 Javascript
jQuery中table数据的值拷贝和拆分
2017/03/19 Javascript
JavaScript使用链式方法封装jQuery中CSS()方法示例
2017/04/07 jQuery
基于JavaScript实现新增内容滚动播放效果附完整代码
2017/08/24 Javascript
node+koa实现数据mock接口的方法
2017/09/20 Javascript
基于js 字符串indexof与search方法的区别(详解)
2017/12/04 Javascript
vue项目国际化vue-i18n的安装使用教程
2018/03/14 Javascript
0基础学习前端开发的一些建议
2020/07/14 Javascript
通过实例解析JavaScript常用排序算法
2020/09/02 Javascript
python基础教程之自定义函数介绍
2014/08/29 Python
Python中random模块生成随机数详解
2016/03/10 Python
python 自动化将markdown文件转成html文件的方法
2016/09/23 Python
Python+selenium实现自动循环扔QQ邮箱漂流瓶
2018/05/29 Python
Python3.5面向对象程序设计之类的继承和多态详解
2019/04/24 Python
用Python获取摄像头并实时控制人脸的实现示例
2019/07/11 Python
Django中多种重定向方法使用详解
2019/07/17 Python
PyCharm设置注释字体颜色以及是否倾斜的操作
2020/09/16 Python
弄清Pytorch显存的分配机制
2020/12/10 Python
python网络爬虫实现发送短信验证码的方法
2021/02/25 Python
Sofmap官网:日本著名的数码电器专卖店
2017/05/19 全球购物
梅西百货官网:Macy’s
2020/08/04 全球购物
国际贸易专业个人求职信范文分享
2013/12/14 职场文书
小组合作学习反思
2014/02/18 职场文书
文明演讲稿范文
2014/05/12 职场文书
大学生就业求职信
2014/06/12 职场文书