协程.线程和进程的补充

线程:threading提供线程相关的操作。线程是应用程序工作的做小单位,它包含在进程中,是进程中的实际运行单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每个线程并执行不同的任务。

   threading模块建立在-thread之上,thread以低级的最原始的方式来处理控制线程,而threading模块通过对-thread二次封装,提供了更方便的api来处理线程。

线程锁:我们使用线程对数据进行操作的时候,如果多个线程同时修改某个数据的时候,可能会出现多个不同的预料结果,为了保证数据的准确性,引入了锁的概念。

threading.Rlock与threading.Lock的区别:

Rlock允许在同一线程中被多次acquire。而Lock却不允许这样,如果使用Rlock,那么acquire和release必须成对出现,即调用了n次acquire必须调用n次release才能释放所占用的锁。

threading.Event

Event是线程间通讯最直接的机制之一。一个线程发送一个Event信号,则其他线程等待这个信号。用于主线程控制其它线程的执行。Event管理一个flag,这个flag可以使用set()设置成ture()或者使用clear()重置为false。

wait()这用于阻塞,在flag为ture之前,flag默认为false

threading.Condition

Python提供的condition对象提供了对复杂线程同步问题的支持。condition被称为条件变量,除了提供与lock类似acquire和release方法外,还提供了wait和notify方法。线程首先acquire一个条件变量,然后判断一些条件。

如果条件不满足则wait,如果条件满足进行一些处理改变条件后,通过notify方法通知其它线程,其它处于wait状态的线程接到通知后会重新判断条件,不断的重复这一过程,从而解决复杂的同步问题。

在典型的设计风格里,利用condition变量锁去访问一些共享状态,线程在获取到它想得到的状态前,会反复调用wait()。修改状态的线程在他们状态改变时调用notify()活notify-all(),用这种方式,线程会尽可能的获

取到想要的一个等待者的状态。

猜你喜欢

转载自www.cnblogs.com/jacky912/p/10265781.html