好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

前言:

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实现线程间同步介绍的详细内容...

  阅读:32次