您现在的位置是:网站首页> 编程资料编程资料

python中Event实现线程间同步介绍_python_

2023-05-26 585人已围观

简介 python中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线程间同步内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

-六神源码网