线程间通信:Queue

Posted pzk7788

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程间通信:Queue相关的知识,希望对你有一定的参考价值。

线程间使用队列来互相交换数据,数据可以是字符串 、列表 、元组等,Queue 是提供队列操作的模块,常见的队列如下:

FIFO:First In First Out 先进先出队列,也就是最先放进去的数据,会被先拿出来,可以用 Queue.Queue() 来实现
LIFO:Last In First Out 后进先出队列,也就是最先放进去的数据,会到最后才被拿出来,可以用 Queue.LifoQueue() 来实现
Priority:指定优先级队列,也就是可以指定优先拿出哪些数据,可以用 Queue.PriorityQueue() 来实现

Queue 常见用法:

q = Queue.Queue(maxsize=200)  用于创建一个队列对象,maxsize 用于指定队列的最大长度,一条数据就是长度就是1
q.maxsize:查看队列的最大长度
q.queue.clear():用于清空队列里的数据
q.empty():查看队列是否为空,如果为空返回True,否则返回False
q.full():查看队列是否已经达到指定的最大长度,如果是则返回True,否则返回False
q.get():从队列中返回并删除一个数据,语法为:get(self, block=True, timeout=None),block=True 表示阻塞,可选参数,也就是如果队列里面是空的,我们还从队列中 get 数据,就会被阻塞,即一直停留在 get 这个动作中,直到有数据 put 进来才会 get 得到东西。默认是 block=True,如果是 blok=False 则表示不阻塞,即如果队列是空的我们还从队列中 get 数据,那么会抛出 Empty exception 这个异常,表示队列是空的;timeout=None 可以指定阻塞的时间,如果超过这个时间同样抛出 Empty exception 异常
q.put():往队列里放入一个数据,或者说添加一个数据,语法为:put(self, item, block=True, timeout=None),其中 item 是要添加的数据;block=True 表示阻塞,可选参数,也就是即使队列满了我们也可以往里面 put 数据,只不过会先阻塞而已,等到有数据被 get 出去才会放进去,默认是 True,如果是 False 表示不阻塞,即如果队列满了我们还往里面 put 数据,就会抛出 Full exception 这个异常,表示队列已经满了;timeout=None 可以指定阻塞的时间,如果超过这个时间同样抛出 Full exception 异常

 

 

 

 

    

 

    

以上是关于线程间通信:Queue的主要内容,如果未能解决你的问题,请参考以下文章

线程_进程间通信Queue合集

线程_进程间通信Queue合集

8-2 如何线程间通信

线程间通信推荐用队列

多线程下的队列问题

进程间通信与线程