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操作CouchDB的方法
Oct 08 Python
在Django框架中编写Contact表单的教程
Jul 17 Python
tensorflow输出权重值和偏差的方法
Feb 10 Python
用python 批量更改图像尺寸到统一大小的方法
Mar 31 Python
python flask实现分页的示例代码
Aug 02 Python
python实现推箱子游戏
Mar 25 Python
python实现对任意大小图片均匀切割的示例
Dec 05 Python
使用python进行拆分大文件的方法
Dec 10 Python
Python生态圈图像格式转换问题(推荐)
Dec 02 Python
Python udp网络程序实现发送、接收数据功能示例
Dec 09 Python
python利用os模块编写文件复制功能——copy()函数用法
Jul 13 Python
Python实现灰色关联分析与结果可视化的详细代码
Mar 25 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 伪造本地文件包含漏洞的代码
2011/11/03 PHP
Zend Framework实现Zend_View集成Smarty模板系统的方法
2016/03/05 PHP
PHP+swoole+linux实现系统监控和性能优化操作示例
2019/04/15 PHP
Struts2的s:radio标签使用及用jquery添加change事件
2013/04/08 Javascript
javascript 手动给表增加数据的小例子
2013/07/10 Javascript
Jquery each方法跳出循环,并获取返回值(实例讲解)
2013/12/12 Javascript
jquery使用jxl插件导出excel示例
2014/04/14 Javascript
Javascript基础教程之数组 array
2015/01/18 Javascript
浅谈JavaScript数据类型
2015/03/03 Javascript
jquery判断至少有一个checkbox被选中的方法
2015/06/05 Javascript
Javascript学习之谈谈JS的全局变量跟局部变量(推荐)
2016/08/28 Javascript
js弹出窗口简单实现代码
2017/03/22 Javascript
微信小程序商城项目之商品属性分类(4)
2017/04/17 Javascript
JS基于正则表达式的替换操作(replace)用法示例
2017/04/28 Javascript
详解Vue2中组件间通信的解决全方案
2017/07/28 Javascript
JS实现将二维数组转为json格式字符串操作示例
2018/07/12 Javascript
微信小程序实现收藏与取消收藏切换图片功能
2018/08/03 Javascript
javascript匿名函数中的'return function()'作用
2018/10/15 Javascript
JavaScript获取页面元素的常用方法详解
2019/09/28 Javascript
Javascript Web Worker使用过程解析
2020/03/16 Javascript
在Chrome DevTools中调试JavaScript的实现
2020/04/07 Javascript
js实现验证码干扰(静态)
2021/02/22 Javascript
python 实现将多条曲线画在一幅图上的方法
2019/07/07 Python
python flask中动态URL规则详解
2019/11/22 Python
python中sort sorted reverse reversed函数的区别说明
2020/05/11 Python
python将下载到本地m3u8视频合成MP4的代码详解
2020/11/24 Python
英国受欢迎的运动鞋和街头服装商店:Footasylum
2018/06/12 全球购物
Kangol帽子官网:坎戈尔袋鼠
2018/09/26 全球购物
高中化学教学反思
2014/01/13 职场文书
护理毕业生自我鉴定
2014/02/11 职场文书
2014年医学生毕业自我鉴定
2014/03/26 职场文书
2014年“四风”问题个人整改措施
2014/09/17 职场文书
2014年班务工作总结
2014/12/02 职场文书
学校推普周活动总结
2015/05/07 职场文书
导游词之新疆尼雅遗址
2019/10/16 职场文书
Java 实战项目之家居购物商城系统详解流程
2021/11/11 Java/Android