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的实际应用操作方案详解
转载来源:http://www.csdahua.cn/qtweb/news0/475500.html
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网