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定时器使用示例分享
Feb 16 Python
python和ruby,我选谁?
Sep 13 Python
python特性语法之遍历、公共方法、引用
Aug 08 Python
python函数与方法的区别总结
Jun 23 Python
Python Numpy计算各类距离的方法
Jul 05 Python
图解python全局变量与局部变量相关知识
Nov 02 Python
python实现百度OCR图片识别过程解析
Jan 17 Python
浅谈Python中os模块及shutil模块的常规操作
Apr 03 Python
python语言是免费还是收费的?
Jun 15 Python
如何用python免费看美剧
Aug 11 Python
浅谈如何使用python抓取网页中的动态数据实现
Aug 17 Python
解决Pyinstaller打包软件失败的一个坑
Mar 04 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/06/18 PHP
Zend Framework路由器用法实例详解
2016/12/11 PHP
基于thinkPHP类的插入数据库操作功能示例
2017/01/06 PHP
JS 两个字符串时间的天数差计算
2013/08/25 Javascript
使用jquery hover事件实现表格的隔行换色功能示例
2013/09/03 Javascript
利用js实现在浏览器状态栏显示访问者在本页停留的时间
2013/12/29 Javascript
jQuery获取节点和子节点文本的方法
2014/07/22 Javascript
Backbone.js的Hello World程序实例
2015/06/19 Javascript
NodeJS遍历文件生产文件列表功能示例
2017/01/22 NodeJs
JavaScript实现点击出现图片并统计点击次数功能示例
2018/07/23 Javascript
详解Vue中的MVVM原理和实现方法
2020/07/15 Javascript
vue中echarts引入中国地图的案例
2020/07/28 Javascript
Vue使用轮询定时发送请求代码
2020/08/10 Javascript
OpenLayers加载缩放控件使用方法详解
2020/09/25 Javascript
[58:32]EG vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[48:51]完美世界DOTA2联赛PWL S2 Magma vs InkIce 第一场 11.28
2020/12/02 DOTA
用python分割TXT文件成4K的TXT文件
2009/05/23 Python
Python 爬虫模拟登陆知乎
2016/09/23 Python
python机器学习案例教程——K最近邻算法的实现
2017/12/28 Python
pip指定python位置安装软件包的方法
2019/07/12 Python
哪种Python框架适合你?简单介绍几种主流Python框架
2020/08/04 Python
美国在线眼镜商城:Eyeglasses.com
2017/06/26 全球购物
企业演讲稿范文
2013/12/28 职场文书
办公室前台岗位职责
2014/01/04 职场文书
大一学生的职业生涯规划书范文
2014/01/19 职场文书
决心书范文
2014/03/11 职场文书
班主任班级寄语大全
2014/04/04 职场文书
抵押贷款承诺书
2014/05/30 职场文书
银行员工犯错检讨书
2014/09/16 职场文书
2014国庆节演讲稿:祖国在我心中(400字)
2014/09/25 职场文书
2015幼儿园庆元旦活动方案
2014/12/09 职场文书
幼儿园园长个人总结
2015/03/02 职场文书
初三数学教学反思
2016/02/17 职场文书
Python面向对象之成员相关知识总结
2021/06/24 Python
mysql优化之query_cache_limit参数说明
2021/07/01 MySQL
MySQL中一条SQL查询语句是如何执行的
2022/04/08 MySQL