队列
创建一个被多个线程共享的 Queue 对象,这些线程通过使用 put() 和 get() 操作来向队列中添加或者删除元素。
注意
最好不要使用这些方法
- q.qsize() , q.full() , q.empty()
- 这些方法都不是线程安全的,可能你对一个队列使用 empty() 判断出这个队列为空,但同时另外一个线程可能已经向这个队列中插入一个数据项
避免当执行某些特定队列操作时发生无限阻塞的情况
def producer(q):...try:q.put(item, block=False)except queue.Full:log.warning('queued item %r discarded!', item)
超时自动终止以便检查终止标志 ``` _running = True
def consumer(q): while _running: try: item = q.get(timeout=5.0)
# Process item...except queue.Empty:pass
- **最好只传递不可修改的数据结构**- (如:整型、字符串或者元组)或者一个对象的深拷贝
from queue import Queue from threading import Thread import copy
A thread that produces data
def producer(out_q): while True:
# Produce some data...out_q.put(copy.deepcopy(data))
A thread that consumes data
def consumer(in_q): while True:
# Get some datadata = in_q.get()# Process the data...
```
