Yifei Kong

Jun 22, 2018

Python 中的 queue 模块

在Python中多进程或者多线程之间通信可以使用队列,标准库中实现了一个线程安全的库 queue.Queue,和进程安全的库 multiprocessing.Queue

There are 3 kind of queues: `Queue LifoQueue HeapQueue

q = Queue(size)

get(block=True) return a object
get_nowait()
put(item, block=True) put a object 

qsize()
empty()
full()

task_done() # indicate one item process finished raise ValueError
join() # wait until all item processed

Queue.Empty
Queue.Full

How to iterate a queue?

by using iter(q, None), note that you have to put a sentinel value manually

Queue vs multiprocessing.Queue

despite their similar api, their implementation is completely different

http://stackoverflow.com/questions/925100

如果在一个线程使用了异步代码,那么所有的操作都必须使用异步操作,但是并不是所有的操作都需要或者能够使用异步操作。

在异步线程和同步线程之间分享数据需要使用一个共用的queue

如果需要把异步操作分布式不熟使用,在异步的事件循环之间分享数据也需要使用一个queue