天天看點

python并發鎖,分布式鎖,redis分布式鎖

關于toollib

當我們高并發時,為了確定一個方法(或代碼塊)同一時間隻能被同一個線程執行,這時我們就需要鎖來保證一緻性

toollib實作了redis分布式鎖。(pip install toollib)

示例代碼如下:

from toollib.locker import Locker

locker = Locker(redis_cli)  # 建立鎖執行個體(注:redis_cli為redis連接配接)
if locker.acquire(acquire_timeout=2)  # 擷取鎖
    # do something
    locker.release()  # 釋放鎖

# 另:with方式
locker = Locker(redis_cli, acquire_timeout=2)
with locker:
    if locker.is_lock:  # 若擷取鎖
        pass  # do something

# +++++++具體示例+++++++
import threading

from toollib.locker import Locker
from toollib.redis_cli import RedisCli


def foo(node, locker):
    global num
    with locker:
        if locker.is_lock:
            print(f'{node}: 成功擷取鎖')
            for i in range(10):
                num += 1
                print(f"{node}: {num}")


if __name__ == '__main__':
    redis_cli = RedisCli(host='127.0.0.1')  # redis連接配接
    locker = Locker(redis_cli, acquire_timeout=10, timeout=29)  # 并發過大時,注意逾時設定
    num = 0
    for node in range(100):
        t = threading.Thread(target=foo, args=(node, locker, ))
        t.start()