各位用户为了找寻关于Python多线程经典问题之乘客做公交车算法实例的资料费劲了很多周折。这里教程网为您整理了关于Python多线程经典问题之乘客做公交车算法实例的相关资料,仅供查阅,以下为您介绍关于Python多线程经典问题之乘客做公交车算法实例的详细内容

本文实例讲述了Python多线程经典问题之乘客做公交车算法。分享给大家供大家参考,具体如下:

问题描述:

乘客乘坐公交车问题,司机,乘客,售票员协同工作,通过多线程模拟三者的工作。 司机:开车,停车 售票员:打开车门,关闭车门 乘客:上车,下车

用Python的Event做线程同步通信,代码如下:

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 # *-* coding:gb2312 *-* import threading import time stationName=("车站0","车站1","车站2","车站3","车站4","车站5","车站6") currentStationIndex = -1 eventBusStop = threading.Event() eventClosedDoor = threading.Event() eventOpenedDoor = threading.Event() stationCount = len(stationName) class Passenger(threading.Thread):   def __init__(self,no,getonStation,getoffStation):     self.no =no     self.getonStation=getonStation     self.getoffStation=getoffStation     threading.Thread.__init__(self)   def run(self):     bExit= False     global currentStationIndex     global stationCount     bAlreadyGetOnStation = False     while not bExit:       eventOpenedDoor.wait()       if self.getonStation == currentStationIndex and bAlreadyGetOnStation == False:         print "乘客%d在%s上车" %(self.no,stationName[currentStationIndex])         bAlreadyGetOnStation =True       elif self.getoffStation == currentStationIndex:         print "乘客%d在%s下车" %(self.no,stationName[currentStationIndex])         bExit = True       time.sleep(1) class Driver(threading.Thread):   def run(self):     bExit= False     global currentStationIndex     global stationCount     while not bExit:       print "司机: 公交车开始行驶....."       time.sleep(5)       currentStationIndex += 1       print "司机: 到站 ",stationName[currentStationIndex]       eventBusStop.set()       eventClosedDoor.wait()       eventClosedDoor.clear()       if currentStationIndex == stationCount-1:         bExit= True class Conductor(threading.Thread):   def run(self):     bExit= False     global currentStationIndex     global stationCount     while not bExit:       eventBusStop.wait()       eventBusStop.clear()       print "售票员打开车门:%s到了" %(stationName[currentStationIndex])       eventOpenedDoor.set()       time.sleep(5)       print "售票员关闭车门"       eventOpenedDoor.clear()       eventClosedDoor.set()       if currentStationIndex == stationCount-1:         bExit = True def test():   passPool=[]   passPool.append(Passenger(0,0,3))   passPool.append(Passenger(1,1,3))   passPool.append(Passenger(2,2,4))   passPool.append(Passenger(3,0,5))   passPool.append(Passenger(4,1,3))   passPool.append(Passenger(5,2,4))   passPool.append(Passenger(6,4,5))   passPool.append(Passenger(7,0,2))   passPool.append(Passenger(8,1,3))   passPool.append(Conductor())   passPool.append(Driver())   leng = len(passPool)   for i in range(leng):     passPool[i].start() if __name__=='__main__':   test()

输出结果如下:

希望本文所述对大家Python程序设计有所帮助。