Python 多线程4种方式同步:
1,Lock。
最简单的用法,对于一个全局变量,要修改或者读取前都记得lock.acquire下。然后用完就release下就好。
缺点:无法通知某个线程去执行,需要不停的询问查,是否可以获得锁了。
2,信号量:
就是一个计数器,他不i能<0,当<0时,则等待其他的线程release,此线程才可以使用。
然后使用方法和Lock一样。
3,条件变量:
等会某些条件发生,否则一直处于wait状态,类似PV模型。
不过不锁更加方便和好用。
可以认为condition维护了一个锁和waitting池,线程通过acquire获得condition变量,调用wait,则会释放condition内部锁并且进入blocked状态,同时wait池记录这
个线程。当调用notify时,condition对象会从waitting池中挑一个线程,通知他调用acquire尝试取到锁。
4,queue :
使用get 和put 方法来操作。 queue自动管理。空了则禁止get,阻塞。满了则自动禁止put。 所以初始化queue的时候,要指定大小。