线程间通信: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 异常

    

    

猜你喜欢

转载自www.cnblogs.com/pzk7788/p/10355506.html