c

此博客为转载内容,原链接为https://www.cnblogs.com/sea-stream/p/10799009.html ,涉及数据库和Python相关信息技术内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

#!/usr/bin/env python
# coding=utf-8

import redis
import time, datetime


def acquire_lock(conn, lockname, identifier, expire=10):
    if conn.setnx(lockname, identifier):
        conn.expire(lockname, expire)
        return identifier
    elif not conn.ttl(lockname):
        conn.expire(lockname, expire)
    return False

def release_lock(conn, lockname, identifier):
    pipe = conn.pipeline(True)
    while True:
        try:
            pipe.watch(lockname)
            if pipe.get(lockname) == identifier:
                pipe.multi()
                pipe.delete(lockname)
                pipe.execute()
                return True
            pipe.unwatch()
            break
        except redis.exceptions.WatchError:
            pass
    # we lost the lock
    return False

conn = redis.Redis(host='localhost', port=6379, db=0)

# 1 identifier
# 2 False
# 11 True
# 22 False
# 33 barx2
# 44 True

ret = acquire_lock(conn, "lockname", "identifier", 3)
print("1", ret)
ret = acquire_lock(conn, "lockname", "identifier", 3)
print("2", ret)
ret = release_lock(conn, "lockname", "identifier")
print("11", ret)
ret = release_lock(conn, "lockname", "identifier")
print("22", ret)
ret = acquire_lock(conn, "footest", "bartest", 10)
print("33", ret)

 

转载于:https://www.cnblogs.com/sea-stream/p/10799009.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值