1。1queue模块在多线程中的作用 queue模块可以实现各种多个生产者多个消费者队列,可用于在执行的多个线程之间安全地交换信息1。2queue模块创建的三种队列类 队列类 说明 Queue(〔maxsize〕) 创建一个FIFO队列。maxsize是队列中可以放入的项的最数量,如果省略maxsize参数或将它设置为0,队列大小将无究大 LifeQueue(〔maxsize〕) 创建一个LIFO队列,也可以叫栈 PriorityQueue(〔maxsize〕) 创建一个优先级队列,其中项按照优先级从低到高依次排好。使用这种队列时,项应该是(priority,data)形式的元组,其中priotiry是一个数字1。3队列类实例的常用方法 方法 说明 q。qsize() 返回队列的正确大小。因为其他队列可能正在更新队列,因此该方法返回的数字不完全可靠 q。empty() 如果队列为空,返回True,否则返回False q。full() 如果队列已满,返回True,否则返回False q。put(item〔,block〔,timeout〕〕) 将item放入队列中,如果可选参数block为True(默认值),调用者将被阻塞直到队列中出现可用的空闲位置为止。如果block为False,队列满时将引发Full异常。timeout提供可选的超时值,单位为秒,如果出现超时,将引发Full异常 q。putnowait(tiem) 等价于q。put(item,False)方法 q。get(〔block〔,timeout〕〕) 从队列中删除一项,然后返回这个项。如果可选参数block为True(默认值)。调用者将阻塞,直到队列中出现可用的项。如果可选参数block为False,队列为空时会引发tempty异常。timeout提供可选的超时值,单位为秒。如果出现超时,将引发Empty异常 q。getnowait() 等价于get(0)方法 q。taskdone() 队列中数据的消费者用来指示对于项的处理已经结束。如果使用此方法,那么从队列中删除的每一项都应该调用一次 q。join() 阻塞直到队列中的所有项均被删除和处理为止。一量为队列中的每一项都调用于一次q。taskdone()方法,此方法将会直接返回1。4使用队列的线程示例importthreadingfromqueueimportQueueclassWorkerThread(threading。Thread):definit(self,args,kwargs):threading。Thread。init(self,args,kwargs)self。inputqueueQueue()defsend(self,item):self。inputqueue。put(item)defclose(self):self。inputqueue。put(None)self。inputqueue。join()defrun(self):whileTrue:itemself。inputqueue。get()ifitemisNone:breakTODO,具体逻辑print(item)self。inputqueue。taskdone()完成,指示收到和返回哨兵self。inputqueue。taskdone()returnNoneifnamemain:wtWorkerThread()wt。start()wt。send(hello)wt。send(world)wt。close()