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

Petunia ·
更新时间:2024-11-13
· 1285 次阅读

前言:

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



线程 Python event

需要 登录 后方可回复, 如果你还没有账号请 注册新账号