queue介绍
queue是python中的标准库,俗称队列,可以直接import 引用,在python2.x中,模块名为Queue在python中,多个线程之间的数据是共享的,多个线程进行数据交换的时候,不能够保证数据的安全性和一致性,所以当多个线程需要进行数据交换的时候,队列就出现了,队列可以完美解决线程间的数据交换,保证线程间数据的安全性和一致性Python 的 Queue 模块中提供了同步的、线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue,和优先级队列 PriorityQueue。这些队列都实现了锁原语,能够在多线程中直接使用,可以使用队列来实现线程间的同步。Queue 模块中的常用方法:Queue.qsize() 返回队列的大小Queue.empty() 如果队列为空,返回True,反之FalseQueue.full() 如果队列满了,返回True,反之FalseQueue.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() 实际上意味着等到队列为空,再执行别的操作import threadingimport timedef a(): print("a startn") for i in range(10): time.sleep(0.1) print("a finishn")def b(): print("b startn") print("b finishn")def main(): # t=threading.Thread(target=a,name="T") t = threading.Thread(target=a) t2=threading.Thread(target=b) t.start() t2.start() # t2.join() # t.join() print("all donen")if __name__ == ’__main__’: main()Queue 模块:import queueimport threadingimport timeexitFlag = 0class myThread (threading.Thread): def __init__(self,threadID,name,q): threading.Thread.__init__(self) self.threadID = threadID self.name = name self.q = q def run(self): print ("开启线程:" + self.name) process_data(self.name,self.q) print ("退出线程:" + self.name)def process_data(threadName,q): while not exitFlag: queueLock.acquire() if not workQueue.empty(): data = q.get() queueLock.release() print ("%s processing %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# 创建新线程for tName in threadList: thread = myThread(threadID,tName,workQueue) thread.start() threads.append(thread) threadID += 1# 填充队列queueLock.acquire()for word in nameList: workQueue.put(word)queueLock.release()# 等待队列清空while not workQueue.empty(): pass# 通知线程是时候退出exitFlag = 1# 等待所有线程完成for t in threads: t.join()print ("退出主线程")到此这篇关于Python多线程 Queue 模块的文章就介绍到这了,更多相关Python Queue 模块内容请搜索编程之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程之家!版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。