这篇文章给大家分享的是有关Python实现条件变量同步的方法的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。

条件变量同步

有一类线程需要满足条件之后才能够继续执行,Python提供了threading.Condition 对象用于条件变量线程的支持,它除了能提供RLock()或Lock()的方法外,还提供了 wait()、notify()、notifyAll()方法。

lock_con=threading.Condition([Lock/Rlock]): 锁是可选选项,不传人锁,对象自动创建一个RLock()。

wait():条件不满足时调用,线程会释放锁并进入等待阻塞;

notify():条件创造后调用,通知等待池激活一个线程;

notifyAll():条件创造后调用,通知等待池激活所有线程。

importthreading,timefromrandomimportrandintclassProducer(threading.Thread):defrun(self):globalLwhileTrue:val=randint(0,100)print('生产者',self.name,':Append'+str(val),L)iflock_con.acquire():L.append(val)lock_con.notify()lock_con.release()time.sleep(3)classConsumer(threading.Thread):defrun(self):globalLwhileTrue:lock_con.acquire()iflen(L)==0:lock_con.wait()print('消费者',self.name,":Delete"+str(L[0]),L)delL[0]lock_con.release()time.sleep(0.25)if__name__=="__main__":L=[]lock_con=threading.Condition()threads=[]foriinrange(5):threads.append(Producer())threads.append(Consumer())fortinthreads:t.start()fortinthreads:t.join()print('----end----')

运行结果:

生产者Thread-1:Append63[]生产者Thread-2:Append66[63]生产者Thread-3:Append20[63,66]生产者Thread-4:Append83[63,66,20]生产者Thread-5:Append2[63,66,20,83]生产者Thread-4:Append26[]消费者Thread-6:Delete26[26]生产者Thread-2:Append21[]生产者Thread-3:Append71[21]生产者Thread-1:Append19[21,71]生产者Thread-5:Append100[21,71,19]生产者Thread-1:Append96[]消费者Thread-6:Delete96[96]........

感谢各位的阅读!关于Python实现条件变量同步的方法就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到吧!