python 分布式锁_python分布式锁

在进行某些比较耗时的查询时,为了避免进行重复计算,可以采用分布式锁服务,

在同一个时间只有一个操作在进行,同类的操作进行等待重试.

下面的代码(fetch_with_dist_lock)定义了一个fetcher,一个updater.

如果fetcher获取不到数据,则使用updater进行更新.更新成功之后通过fetcher返回结果.

也有一些情况,我们只想更新某个数据,更新者是多个,但是更新操作不是原子的.那么

我们会通过update_with_dist_lock来进行. def fetch_with_dist_lock(mc_store, mutex_key, fetcher, updater,

lock_time=3*60*1000, sleep_time=100, retry_times=3):

i = 0

while i < retry_times:

i += 1

need_update, results = fetcher()

if need_update:

if(mc_store.add(mutex_key, lock_time)):

try:

updater()

continue

finally:

#release the distribute mutex anyway

mc_store.delete(mutex_key)

else:

time.sleep((sleep_time*1.0)/1000)

continue

return results

#too much tries, but failed still.

return None

def f_wrapper(f, *args, **kwargs):

def _():

return f(*args, **kwargs)

return _

def update_with_dist_lock(mc_store, mutex_key, updater, lock_time=60*1000, sleep_time=100, retry_times=5):

i = 0

while i < retry_times:

i += 1

if (mc_store.add(mutex_key, lock_time)):

try:

updater()

return True

finally:

mc_store.delete(mutex_key)

else:

time.sleep((sleep_time*1.0)/1000)

continue

return False

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值