最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解決python-redis-lock分布式鎖的問題

 更新時(shí)間:2021年10月31日 10:32:19   作者:Loganer  
這篇文章主要介紹了python-redis-lock分布式鎖的問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

python-redis-lock

官方文檔
不錯(cuò)的博文可參考

問題背景

在使用celery執(zhí)行我們的異步任務(wù)時(shí),為了提高效率,celery可以開啟多個(gè)進(jìn)程來(lái)啟動(dòng)對(duì)應(yīng)的worker。
但是會(huì)出現(xiàn)這么一種情況:在獲取到數(shù)據(jù)源之后要對(duì)數(shù)據(jù)庫(kù)進(jìn)行掃描,根據(jù)UUID來(lái)斷定是插入還是更新,兩個(gè)worker 同時(shí) (相差0.001S)拿到了UUID但是在其中一個(gè)沒插入時(shí),另一個(gè)也掃描完了數(shù)據(jù)庫(kù),這時(shí)這兩個(gè)worker都會(huì)認(rèn)為自己拿到的UUID是在數(shù)據(jù)庫(kù)中沒有存在過的,所以都會(huì)調(diào)用INSERT方法來(lái)進(jìn)行插入操作。

幾種解決方案

為了解決這個(gè)問題,一般有如下解決方案.
分布式鎖家族:

數(shù)據(jù)庫(kù):

  • 排它鎖(悲觀鎖)
  • 樂觀鎖

Redis

  1. 自己實(shí)現(xiàn)Redis SET SETNX 操作,結(jié)合Lua腳本確保原子操作
  2. RedLock Redis里分布式鎖實(shí)現(xiàn)的算法,爭(zhēng)議比較大,謹(jǐn)慎使用
  3. python-redis-lock 本文將要介紹的技術(shù)。這個(gè)庫(kù)提供的分布式鎖很靈活,是否需要超時(shí)?是否需要自動(dòng)刷新?是否要阻塞?都是可選的。沒有最好的算法,只有最合適的算法,開發(fā)人員應(yīng)該根據(jù)實(shí)際需求場(chǎng)景謹(jǐn)慎選擇具體用哪一種技術(shù)去實(shí)現(xiàn)。

設(shè)計(jì)思路:

來(lái)自官網(wǎng) 

Zookeeper
這個(gè)應(yīng)該是功能最強(qiáng)大的,比較專業(yè),穩(wěn)定性好。我還沒使用過,日后玩明白了再寫篇文章總結(jié)一下。

擴(kuò)展思路

在celery的場(chǎng)景下也可以使用celery_once進(jìn)行任務(wù)去重操作, celery_once底層也是使用redis進(jìn)行實(shí)現(xiàn)的。
可以參考這篇

Talk is cheap, show me your code!

一個(gè)簡(jiǎn)單的demo

import random
import time
import threading
import redis_lock
import redis

HOST = 'YOUR IP LOCATE'
PORT = '6379'
PASSWORD = 'password'


def get_redis():
    pool = redis.ConnectionPool(host=HOST, port=PORT, password=PASSWORD, decode_responses=True, db=2)
    r = redis.Redis(connection_pool=pool)
    return r


def ask_lock(uuid):
    lock = redis_lock.Lock(get_redis(), uuid)
    if lock.acquire(blocking=False):
        print(" %s Got the lock." % uuid)
        time.sleep(5)
        lock.release()
        print(" %s Release the lock." % uuid)
    else:
        print(" %s Someone else has the lock." % uuid)


def simulate():
   for i in range(10):
        id = random.randint(0, 5)
        t = threading.Thread(target=ask_lock, args=(str(id)))
        t.start()


simulate()

Output:

 4 Got the lock.
 5 Got the lock.
 3 Got the lock.
 5 Someone else has the lock.
 5 Someone else has the lock.
 2 Got the lock.
 5 Someone else has the lock.
 4 Someone else has the lock.
 3 Someone else has the lock.
 3 Someone else has the lock.
 2 Release the lock.
 5 Release the lock.
 4 Release the lock.
 3 Release the lock.

到此這篇關(guān)于python-redis-lock分布式鎖的文章就介紹到這了,更多相關(guān)python分布式鎖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python如何使用turtle庫(kù)繪制圖形

    Python如何使用turtle庫(kù)繪制圖形

    這篇文章主要介紹了Python如何使用turtle庫(kù)繪制圖形,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • PyQt6中自定義浮點(diǎn)型滑塊類的實(shí)現(xiàn)

    PyQt6中自定義浮點(diǎn)型滑塊類的實(shí)現(xiàn)

    在PyQt6中,滑塊是常用的用戶界面元素之一,用于選擇數(shù)值范圍,本文主要介紹了PyQt6中自定義浮點(diǎn)型滑塊類的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • pytorch 自定義卷積核進(jìn)行卷積操作方式

    pytorch 自定義卷積核進(jìn)行卷積操作方式

    今天小編就為大家分享一篇pytorch 自定義卷積核進(jìn)行卷積操作方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2019-12-12
  • python繪圖坐橫坐標(biāo)軸顯示方式

    python繪圖坐橫坐標(biāo)軸顯示方式

    這篇文章主要介紹了python繪圖坐橫坐標(biāo)軸顯示方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • python打包為linux可執(zhí)行文件的詳細(xì)圖文教程

    python打包為linux可執(zhí)行文件的詳細(xì)圖文教程

    這篇文章主要給大家介紹了關(guān)于python打包為linux可執(zhí)行文件的詳細(xì)圖文教程,本文介紹的方法可以輕松地將Python代碼變成獨(dú)立的可執(zhí)行文件,需要的朋友可以參考下
    2024-02-02
  • Python itertools庫(kù)高效迭代藝術(shù)實(shí)例探索

    Python itertools庫(kù)高效迭代藝術(shù)實(shí)例探索

    Python 中的?itertools?庫(kù)為迭代器操作提供了豐富的工具集,使得處理迭代對(duì)象變得更加高效和靈活,本篇文章將深入討itertools庫(kù)的常用方法,通過詳實(shí)的示例代碼演示其在解決各種問題中的應(yīng)用
    2024-01-01
  • Python輕量級(jí)web框架bottle使用方法解析

    Python輕量級(jí)web框架bottle使用方法解析

    這篇文章主要介紹了Python輕量級(jí)web框架bottle使用方法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Tensor 和 NumPy 相互轉(zhuǎn)換的實(shí)現(xiàn)

    Tensor 和 NumPy 相互轉(zhuǎn)換的實(shí)現(xiàn)

    本文主要介紹了Tensor 和 NumPy 相互轉(zhuǎn)換的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Tensorflow中批量讀取數(shù)據(jù)的案列分析及TFRecord文件的打包與讀取

    Tensorflow中批量讀取數(shù)據(jù)的案列分析及TFRecord文件的打包與讀取

    這篇文章主要介紹了Tensorflow中批量讀取數(shù)據(jù)的案列分析及TFRecord文件的打包與讀取,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Python深入分析@property裝飾器的應(yīng)用

    Python深入分析@property裝飾器的應(yīng)用

    這篇文章主要介紹了Python @property裝飾器的用法,在Python中,可以通過@property裝飾器將一個(gè)方法轉(zhuǎn)換為屬性,從而實(shí)現(xiàn)用于計(jì)算的屬性,下面文章圍繞主題展開更多相關(guān)詳情,感興趣的小伙伴可以參考一下
    2022-07-07

最新評(píng)論

盈江县| 昌黎县| 江源县| 翼城县| 东平县| 阳春市| 手游| 临汾市| 拜泉县| 绍兴市| 丹寨县| 阳朔县| 正阳县| 金溪县| 乌兰浩特市| 吐鲁番市| 瑞金市| 开化县| 鹰潭市| 东乌珠穆沁旗| 千阳县| 孝感市| 开封市| 闻喜县| 威信县| 海宁市| 连南| 汉中市| 赣州市| 玛曲县| 什邡市| 富裕县| 宝兴县| 宁武县| 从化市| 东至县| 灵台县| 龙口市| 弥渡县| 巴彦淖尔市| 青铜峡市|