python中Event实现线程间同步介绍
作者:hsy12342611
这篇文章主要介绍了python中Event实现线程间同步,Event是python线程间同步一种常用的方法,下列内容总结需要的朋友可以参考一下
前言:
Event在python线程间同步是一种常用的方法,本博客以生产者线程和工作者线程为例说明Event在线程间进行10次同步的应用。
import threading from threading import Event, Thread import time import random from time import sleep pevent = Event() #默认是没有事件的 pevent.clear() cevent = Event() cevent.clear() runtimes = 10 mutex_lock = threading.Lock() class ProducerThread (threading.Thread): def __init__(self, name, runflag): threading.Thread.__init__(self) self.name = name self.runflag = runflag self.continueflag = Event() self.continueflag.set() def run(self): global runtimes sleep(1) print ("开始线程:" + self.name) while self.continueflag.isSet(): print("wait consumer ...") if runtimes == 0: self.continueflag.clear() break pevent.wait() print("come an consumer ...") mutex_lock.acquire() runtimes = runtimes - 1 mutex_lock.release() pevent.clear() sleep(1) cevent.set() print ("退出线程:" + self.name) self.runflag.set() class ConsumerThread (threading.Thread): def __init__(self,name, runflag): threading.Thread.__init__(self) self.name = name self.runflag = runflag self.continueflag = Event() self.continueflag.set() def run(self): global runtimes print ("开始线程:" + self.name) while self.continueflag.isSet(): if 0 == runtimes: self.continueflag.clear() pevent.set() break print("I want to consum ... ", runtimes) pevent.set() #通知生产者要消费 cevent.wait() cevent.clear() sleep(1) print ("退出线程:" + self.name) self.runflag.set() def test_pthread(): runflag = Event() pt = ProducerThread("producer", runflag) ct = ConsumerThread("consumer", runflag) pt.start() ct.start() pt.join() ct.join() runflag.wait() if __name__ == '__main__': print('===============begin=================') test_pthread() print('===============end=================')
运行结果如下:
到此这篇关于python中Event实现线程间同步介绍的文章就介绍到这了,更多相关Event线程间同步内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!