温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

在Python定时器中Lock的实际应用方式介绍

发布时间:2021-09-14 08:55:22 来源:亿速云 阅读:104 作者:chen 栏目:编程语言

这篇文章主要讲解了“在Python定时器中Lock的实际应用方式介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“在Python定时器中Lock的实际应用方式介绍”吧!

在Python定时器中Lock的实际应用

Lock/RLock 和 C# lock 关键字差不多意思。不同的是,Lock/RLock 只需 "锁定" 自己,而 C# lock 还得另外找个引用类型对象。Lock 有个问题就是同一个线程内部也不能多次 "锁定",否则会死锁。RLock 没有这个问题,它会处理 "owning thread" 和 "recursion level" 状态,对于同一线程的多次请求锁行为,只累加计数器。

每次调用 release() 将递减该计数器,直到 0 时释放锁,因此记住 acquire() 和 release() 要成对出现。直接用 RLock,忘了 Lock 吧。

非锁定版本:

def test():  for i in range(3):  print currentThread().name, i  sleep(1)  for i in range(2):   Thread(target = test).start()

输出:

$ ./main.py  Thread-1 0  Thread-2 0  Thread-1 1  Thread-2 1  Thread-1 2  Thread-2 2

锁定版本:

lock = RLock()  def test():  lock.acquire()  try:  for i in range(3):  print currentThread().name, i  sleep(1)  finally:  lock.release()  for i in range(2):  Thread(target = test).start()

输出:

$ ./main.py  Thread-1 0  Thread-1 1  Thread-1 2  Thread-2 0  Thread-2 1  Thread-2 2

RLock 实现了 Context Management Protocol,会自动调用 acquire() 和 release() 函数,因此直接用 with/as 来实现 C# "lock(o) { ... }"。

lock = RLock()  def test():  with lock:  for i in range(3):  print currentThread().name, i  sleep(1)  for i in range(2):  Thread(target = test).start()

感谢各位的阅读,以上就是“在Python定时器中Lock的实际应用方式介绍”的内容了,经过本文的学习后,相信大家对在Python定时器中Lock的实际应用方式介绍这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI