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使用cookielib模块操作cookie的实例教程
Jul 12 Python
python 循环while和for in简单实例
Aug 16 Python
Python3中使用urllib的方法详解(header,代理,超时,认证,异常处理)
Sep 21 Python
Python计算斗牛游戏概率算法实例分析
Sep 26 Python
Tensorflow 训练自己的数据集将数据直接导入到内存
Jun 19 Python
python利用插值法对折线进行平滑曲线处理
Dec 25 Python
对Python发送带header的http请求方法详解
Jan 02 Python
python隐藏终端执行cmd命令的方法
Jun 24 Python
Django框架自定义模型管理器与元选项用法分析
Jul 22 Python
Python自动发送和收取邮件的方法
Aug 12 Python
python爬取股票最新数据并用excel绘制树状图的示例
Mar 01 Python
python使用pymysql模块操作MySQL
Jun 16 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 上传文件类型判断函数(避免上传漏洞 )
2010/06/08 PHP
PHP_Cooikes不同页面无法传递的解决方法
2014/03/07 PHP
ThinkPHP验证码和分页实例教程
2014/08/22 PHP
php socket通信(tcp/udp)实例分析
2016/02/14 PHP
php 策略模式原理与应用深入理解
2019/09/25 PHP
点图片上一页下一页翻页效果
2008/07/09 Javascript
关于div自适应高度/左右高度自适应一致的js代码
2013/03/22 Javascript
jquery跟js初始化加载的多种方法及区别介绍
2014/04/02 Javascript
js实现的点击div区域外隐藏div区域
2014/06/30 Javascript
jquery实现导航固定顶部的效果仿蘑菇街
2014/10/22 Javascript
分享一个常用的javascript静态类
2014/12/31 Javascript
javascript判断css3动画结束 css3动画结束的回调函数
2015/03/10 Javascript
javascript适合移动端的日期时间拾取器
2015/11/10 Javascript
Bootstrap每天必学之面板
2015/11/30 Javascript
用react-redux实现react组件之间数据共享的方法
2018/06/08 Javascript
微信小程序实现默认第一个选中变色效果
2018/07/17 Javascript
vue使用keep-alive保持滚动条位置的实现方法
2019/04/09 Javascript
JS大坑之19位数的Number型精度丢失问题详解
2019/04/22 Javascript
解决vue-router 二级导航默认选中某一选项的问题
2019/11/01 Javascript
基于react项目打包css引用路径错误解决方案
2020/10/28 Javascript
Python入门_学会创建并调用函数的方法
2017/05/16 Python
python获取中文字符串长度的方法
2018/11/14 Python
python 字符串只保留汉字的方法
2018/11/16 Python
python cv2在验证码识别中应用实例解析
2019/12/25 Python
python生成13位或16位时间戳以及反向解析时间戳的实例
2020/03/03 Python
python3通过subprocess模块调用脚本并和脚本交互的操作
2020/12/05 Python
BNKR中国官网:带你感受澳洲领先潮流时尚
2018/08/21 全球购物
什么样的创业计划书可行性高?
2014/02/01 职场文书
期末自我鉴定
2014/02/02 职场文书
公司中秋节活动方案
2014/02/12 职场文书
《小熊住山洞》教学反思
2014/02/21 职场文书
西式婚礼主持词
2014/03/13 职场文书
开除通知书范本
2015/04/25 职场文书
开天辟地观后感
2015/06/09 职场文书
Python基础之数据类型知识汇总
2021/05/18 Python
python异步的ASGI与Fast Api实现
2021/07/16 Python