Python中使用Queue实现消息队列:
Queue对象实现一个fifo信息队列,并且只有一个maxsize一个构造参数,用来表示其最大容量。当其为0时代表容量无限。
Queue.maxsize():返回当前空间值。
Queue.empty():查看是否为空返回true与false
Queue.full(): 查看队列是否已满。
Queue.put(item,block=true,timeout=None),向队列中存放消息,block为是否阻塞,timeout为阻塞时间。如不阻塞或者超时会生成一个full exception。
Queue.get(block=true,timeout=None):获取一个消息,功能元素同put。
Queue.task_done():接受消息线程通过调用该函数说明对应任务已完成。
Queue.join():作用类似于进程与线程中的join。
部分线程测试:
from threading import Thread from multiprocessing import Queue import time class Producer(Thread): def __init__(self,queue): super(Producer, self).__init__() self.queue=queue def run(self): try: for i in xrange(1,6): print ("data is in queue {0}".format(i)) self.queue.put(i) except Exception as e: print ('error!') raise e class Consumer(Thread): def __init__(self,queue): super(Consumer,self).__init__() self.queue=queue def run(self): try: while not self.queue.empty(): number=self.queue.get() name=self.queue if number%2!=0: print ('jishu {0} thread name is {1}'.format(number,self.getName())) else: self.queue.put(number) time.sleep(1) except Exception as e: raise e def main(): queue=Queue() p=Producer(queue=queue) p.start() p.join() time.sleep(1) c=Consumer(queue=queue) c.start() c.join() if __name__=="__main__": main()
C:\Python27\python.exe E:/untitled/Mutil/Queue2.py data is in queue 1 data is in queue 2 data is in queue 3 data is in queue 4 data is in queue 5 jishu 1 thread name is Thread-2 jishu 3 thread name is Thread-2 jishu 5 thread name is Thread-2
浙公网安备 33010602011771号