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

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

成都创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于网站设计制作、成都做网站、沂南网络推广、成都小程序开发、沂南网络营销、沂南企业策划、沂南品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联公司为所有大学生创业者提供沂南建站搭建服务,24小时服务热线:13518219792,官方网址:www.cdcxhl.com

在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的实际应用方式介绍这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!


分享文章:在Python定时器中Lock的实际应用方式介绍
本文网址:http://hbruida.cn/article/gsjodp.html