Python多线程Queue模块怎么使用

Python多线程Queue模块怎么使用

本篇内容介绍了“Python多线程Queue模块怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

queue介绍

queue是python中的标准库,俗称队列,可以直接import 引用,在python2.x中,模块名为Queue
在python中,多个线程之间的数据是共享的,多个线程进行数据交换的时候,不能够保证数据的安全性和一致性,所以当多个线程需要进行数据交换的时候,队列就出现了,队列可以完美解决线程间的数据交换,保证线程间数据的安全性和一致性

Python多线程Queue模块怎么使用

Python 的 Queue 模块中提供了同步的、线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue,和优先级队列 PriorityQueue。

这些队列都实现了锁原语,能够在多线程中直接使用,可以使用队列来实现线程间的同步。
Queue 模块中的常用方法:

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() 实际上意味着等到队列为空,再执行别的操作

importthreadingimporttimedefa():print("astart")foriinrange(10):time.sleep(0.1)print("afinish")defb():print("bstart")print("bfinish")defmain():#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("alldone")if__name__=="__main__":main()

Queue 模块:

importqueueimportthreadingimporttimeexitFlag=0classmyThread(threading.Thread):def__init__(self,threadID,name,q):threading.Thread.__init__(self)self.threadID=threadIDself.name=nameself.q=qdefrun(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("退出主线程")

“Python多线程Queue模块怎么使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注恰卡编程网网站,小编将为大家输出更多高质量的实用文章!

发布于 2022-03-29 22:37:48
收藏
分享
海报
0 条评论
19
上一篇:python树莓派通过队列怎么实现进程交互的程序 下一篇:python中yaml文件怎么使用
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码