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通过websocket与js客户端通信示例分析
Jun 25 Python
python字典多条件排序方法实例
Jun 30 Python
Python抓取百度查询结果的方法
Jul 08 Python
python中如何使用朴素贝叶斯算法
Apr 06 Python
Python读取和处理文件后缀为.sqlite的数据文件(实例讲解)
Jun 27 Python
Python实现图片滑动式验证识别方法
Nov 09 Python
Django实战之用户认证(用户登录与注销)
Jul 16 Python
Python GUI编程 文本弹窗的实例
Jun 11 Python
python快速编写单行注释多行注释的方法
Jul 31 Python
pandas 对日期类型数据的处理方法详解
Aug 08 Python
Tensorflow全局设置可见GPU编号操作
Jun 30 Python
pycharm远程连接服务器并配置python interpreter的方法
Dec 23 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 array数组的教程详解
2013/06/05 PHP
在Ubuntu 14.04上部署 PHP 环境及 WordPress
2014/09/02 PHP
fckeditor 获取文本框值的实现代码
2009/02/09 Javascript
javascript中的变量作用域以及变量提升详细介绍
2013/10/24 Javascript
JavaScript中的值是按值传递还是按引用传递问题探讨
2015/01/30 Javascript
ECMAScript 5严格模式(Strict Mode)介绍
2015/03/02 Javascript
AngularJS基础知识笔记之过滤器
2015/05/10 Javascript
JS插件overlib用法实例详解
2015/12/26 Javascript
javascript高级选择器querySelector和querySelectorAll全面解析
2016/04/07 Javascript
Bootstrap三种表单布局的使用方法
2016/06/21 Javascript
JavaScript中ES6 Babel正确安装过程
2016/07/18 Javascript
第一次接触神奇的前端框架vue.js
2016/12/01 Javascript
Nodejs 获取时间加手机标识的32位标识实现代码
2017/03/07 NodeJs
js实现抽奖效果
2017/03/27 Javascript
详解基于vue-cli优化的webpack配置
2017/11/06 Javascript
使用vue制作探探滑动堆叠组件的实例代码
2018/03/07 Javascript
vue的diff算法知识点总结
2018/03/29 Javascript
angularJs提交文本框数据到后台的方法
2018/10/08 Javascript
深入浅析javascript函数中with
2018/10/28 Javascript
CKeditor富文本编辑器使用技巧之添加自定义插件的方法
2019/06/14 Javascript
vue路由 遍历生成复数router-link的例子
2019/10/30 Javascript
javascript实现京东登录显示隐藏密码
2020/08/02 Javascript
python3实现抓取网页资源的 N 种方法
2017/05/02 Python
Django视图之ORM数据库查询操作API的实例
2017/10/27 Python
Pandas 数据框增、删、改、查、去重、抽样基本操作方法
2018/04/12 Python
win8下python3.4安装和环境配置图文教程
2018/07/31 Python
Python嵌套式数据结构实例浅析
2019/03/05 Python
python远程邮件控制电脑升级版
2019/05/23 Python
Python matplotlib修改默认字体的操作
2020/03/05 Python
python 给图像添加透明度(alpha通道)
2020/04/09 Python
欧洲最大的品牌水上运动服装和设备在线零售商:Wuituit Outlet
2018/05/05 全球购物
Wiggle新西兰:自行车、跑步、游泳
2020/05/06 全球购物
市场营销专业个人自荐信格式
2013/09/21 职场文书
党员对照检查材料思想汇报
2014/09/16 职场文书
小学一年级语文教学反思
2016/03/03 职场文书
如何写好一份优秀的工作总结?
2019/06/21 职场文书