python的threading模块中threading.RLock和threading.Lock
来源:互联网 发布:如何防止盗取网页源码 编辑:程序博客网 时间:2024/05/29 09:30
在threading模块中,定义两种类型的锁:threading.Lock和threading.RLock。它们之间有一点细微的区别,通过比较下面两段代码来说明:
- import
threading - lock
= threading.Lock() #Lock对象 - lock.acquire()
- lock.acquire()
#产生了死锁。 - lock.release()
- lock.release()
- import
threading - rLock
= threading.RLock() #RLock对象 - rLock.acquire()
- rLock.acquire()
#在同一线程内,程序不会堵塞。 - rLock.release()
- rLock.release()
这两种琐的主要区别是:RLock允许在同一线程中被多次acquire。而Lock却不允许这种情况。注意:如果使用RLock,那么acquire和release必须成对出现,即调用了n次acquire,必须调用n次的release才能真正释放所占用的锁。threading.Condition
可以把Condiftion理解为一把高级的锁,它提供了比Lock, RLock更高级的功能,允许我们能够控制复杂的线程同步问题。threadiong.Condition在内部维护一个锁对象(默认是RLock),可以在创建Condigtion对象的时候把锁对象作为参数传入。Condition也提供了acquire, release方法,其含义与锁的acquire, release方法一致,其实它只是简单的调用内部锁对象的对应的方法而已。Condition还提供了如下方法(特别要注意:这些方法只有在占用锁(acquire)之后才能调用,否则将会报RuntimeError异常。):
Condition.wait([timeout]):wait方法释放内部所占用的锁,同时线程被挂起,直至接收到通知被唤醒或超时(如果提供了timeout参数的话)。当线程被唤醒并重新占有锁的时候,程序才会继续执行下去。
Condition.notify():唤醒一个挂起的线程(如果存在挂起的线程)。注意:notify()方法不会释放所占用的锁。
Condition.notify_all()Condition.notifyAll()
唤醒所有挂起的线程(如果存在挂起的线程)。注意:这些方法不会释放所占用的锁。
0 0
- python的threading模块中threading.RLock和threading.Lock
- python—threading.Lock和RLock【threading模块介绍02】
- python2.7 threading 模块 二 Lock RLock
- python threading/lock&Rlock&condition 锁
- python模块学习(threading模块中的Lock类和RLock类)
- python中threading的高级函数应用解析 Lock Rlock Condition Semaphore Timer Event Semaphore对象
- Python的threading模块
- 关于Python的进程线程协程之threading模块(二)Lock,RLock对象以及Semaphore,BoundedSemaphore对象
- Python多线程编程(threading ):使用Lock互斥锁RLock
- Python:使用threading模块实现多线程编程六[可重入锁RLock]
- Python:使用threading模块实现多线程编程六[可重入锁RLock]
- Python中threading模块的join函数
- python的threading和multiprocessing模块初探
- python的threading和multiprocessing模块初探
- python的threading和multiprocessing模块初探
- python的threading和multiprocessing模块初探
- python中threading模块详解
- python中threading模块详解
- 1102: 机器翻译(translate)
- 抓包分析HTTP/HTTPS请求,写12306抢票软件
- ubuntu常用的截图方法
- ruby class_eval的使用
- 算法基础(八):超详细最优二叉树构建(1)
- python的threading模块中threading.RLock和threading.Lock
- hdu 1548(最短路)
- oc2
- 周末总结第9周
- javax.vadition.VaditionException
- Codeforces Div2 242AB
- 从零单排c++ primer(16)
- orcad capture cis 原理图库元件封装更新design cache
- Java抽象类和接口的区别及优缺点