python中有关多线程的操作方法。
threading库是python支持多线程编程的重要模块。
线程的创建
一种方法是直接使用threading中的Thread类创建对象。
另一种方法是继承Thread类并重写__init__()
和run()
方法。
线程的管理
join([timeout])
阻塞当前线程,等待被调线程结束或超时后再执行当前线程,timeout单位是秒。
|
|
isAlive()
测试线程是否处于运行状态。
|
|
daemon属性
如某个子线程的daemon属性为False(默认情况),主线程结束时会检测该子线程是否结束并等待它结束后再退出。若为True,则该子线程不管有没有运行玩,都会随主线程一起结束。
|
|
1会输出,但5不会输出。
线程的同步
RLock对象
|
|
如果没有这把读锁,那么x的值将会变得杂乱无章,出现“脏读”现象。
“死锁”现象:假设有两个线程和两把锁,只有两把锁都给同一个线程的时候这个线程才会运行。那么问题来了,当两个线程各自获得了其中的一把锁,这时它们都在等待另一把锁释放,这时就会出现死锁现象。
Condition对象
用经典的生产者和消费者问题演示。
|
|
notify()方法是从所有等待这个对象锁的线程中随机唤醒一个。
notify_all()方法能够唤醒所有正在等待这个对象锁的线程,唤醒的线程获得锁的概率是随机的,取决于cpu调度。
notify()或者notify_alll()方法并不是真正释放锁,必须等到release方法执行完才真正释放锁。