python如何使用Redis構建分散式鎖
阿新 • • 發佈:2020-01-25
這篇文章主要介紹了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()
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。