https://github.com/suqi/rlock/blob/master/rlock.py

保持逻辑并发情况不产生多次结果

常用于下单,钱包,抢购,秒杀等场景

 1 LOCK_TIMEOUT = 3
2 lock = 0
3 lock_timeout = 0
4 lock_key = 'lock.foo'
5
6 # 获取锁
7 while lock != 1:
8 now = int(time.time())
9 lock_timeout = now + LOCK_TIMEOUT + 1
10 lock = redis_client.setnx(lock_key, lock_timeout)
11 if lock == 1 or (now > int(redis_client.get(lock_key))) and now > int(redis_client.getset(lock_key, lock_timeout)):
12 break
13 else:
14 time.sleep(0.001)
15
16 # 已获得锁
17 do_job()
18
19 # 释放锁
20 now = int(time.time())
21 if now < lock_timeout:
22 redis_client.delete(lock_key)

最新文章

  1. Boost信号/槽signals2
  2. lnmp配置Yii2规则
  3. [http session]
  4. 精品素材:WALK &amp; RIDE 单页网站模板下载
  5. php 下载保存文件保存到本地的两种方法
  6. vsftp关于&quot;550 create directory operation failed&quot;问题解决
  7. 文件类似的推理 -- 超级本征值(super feature)
  8. JS 用角度换东南西北
  9. IIS 支持 ajax 跨域
  10. electron Windows和mac 的菜单栏隐藏
  11. laravel读取excel
  12. bis.org
  13. .net core部署到Ubuntu
  14. rest framework 尝鲜
  15. MySQL 从库down机
  16. 外观模式Facade pattern
  17. POJ-2336 Ferry Loading II(简单DP)
  18. toArray()
  19. PHPCMS部件
  20. bzoj3673可持久化并查集

热门文章

  1. Apple Watch Series 6 全天候视网膜显示屏和全天候高度计是什么鬼
  2. Web Performance API
  3. vue $emit bug
  4. PAUL ADAMS ARCHITECT:爱丁堡的房屋价值创历史新高
  5. 「NGK每日快讯」12.11日NGK公链第38期官方快讯!
  6. C++算法代码——奖学金
  7. JUC学习
  8. 不同浏览器CSS样式不兼容问题
  9. sun公司和apache使用ftpclient的区别
  10. Docker Elasticsearch 集群配置