python 分布式锁_Python实现的redis分布式锁功能示例

本文实例讲述了Python实现的redis分布式锁功能。分享给大家供大家参考,具体如下:

#!/usr/bin/env python

# coding=utf-8

import time

import redis

class RedisLock(object):

def __init__(self, key):

self.rdcon = redis.Redis(host='', port=6379, password="", db=1)

self._lock = 0

self.lock_key = "%s_dynamic_test" % key

@staticmethod

def get_lock(cls, timeout=10):

while cls._lock != 1:

timestamp = time.time() + timeout + 1

cls._lock = cls.rdcon.setnx(cls.lock_key, timestamp)

if cls._lock == 1 or (time.time() > cls.rdcon.get(cls.lock_key) and time.time() > cls.rdcon.getset(cls.lock_key, timestamp)):

print "get lock"

break

else:

time.sleep(0.3)

@staticmethod

def release(cls):

if time.time() < cls.rdcon.get(cls.lock_key):

print "release lock"

cls.rdcon.delete(cls.lock_key)

def deco(cls):

def _deco(func):

def __deco(*args, **kwargs):

print "before %s called [%s]."%(func.__name__, cls)

cls.get_lock(cls)

try:

return func(*args, **kwargs)

finally:

cls.release(cls)

return __deco

return _deco

@deco(RedisLock("112233"))

def myfunc():

print "myfunc() called."

time.sleep(20)

if __name__ == "__main__":

myfunc()

希望本文所述对大家Python程序设计有所帮助。 ad51e517755f8fd6a7ec83ced4ecfaf3.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值