Python 的 Queue 模块中提供了同步的、线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue,和优先级队列 PriorityQueue。
1、说明
这些队列都实现了锁原语,能够在多线程中直接使用,可以使用队列来实现线程间的同步。
模块中的常用方法如下:
Queue.qsize() 返回队列的大小
Queue.empty() 如果队列为空,返回True,反之False
Queue.full() 如果队列满了,返回True,反之False
Queue.full 与 maxsize 大小对应
Queue.get([block[, timeout]])获取队列,timeout等待时间
Queue.get_nowait() 相当Queue.get(False)
Queue.put(item) 写入队列,timeout等待时间
Queue.put_nowait(item) 相当Queue.put(item, False)
Queue.task_done() 在完成一项工作之后,Queue.task_done()函数向任务已经完成的队列发送一个信号
Queue.join() 实际上意味着等到队列为空,再执行别的操作
2、实例
#!/usr/bin/python3 importqueue importthreading importtime exitFlag=0 classmyThread(threading.Thread): def__init__(self,threadID,name,q): threading.Thread.__init__(self) self.threadID=threadID self.name=name self.q=q defrun(self): print("开启线程:"+self.name) process_data(self.name,self.q) print("退出线程:"+self.name) defprocess_data(threadName,q): whilenotexitFlag: queueLock.acquire() ifnotworkQueue.empty(): data=q.get() queueLock.release() print("%sprocessing%s"%(threadName,data)) else: queueLock.release() time.sleep(1) threadList=["Thread-1","Thread-2","Thread-3"] nameList=["One","Two","Three","Four","Five"] queueLock=threading.Lock() workQueue=queue.Queue(10) threads=[] threadID=1 #创建新线程 fortNameinthreadList: thread=myThread(threadID,tName,workQueue) thread.start() threads.append(thread) threadID+=1 #填充队列 queueLock.acquire() forwordinnameList: workQueue.put(word) queueLock.release() #等待队列清空 whilenotworkQueue.empty(): pass #通知线程是时候退出 exitFlag=1 #等待所有线程完成 fortinthreads: t.join() print("退出主线程")
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(0)