Python并发编程之Queue队列
- 一、python的queue 模块
- 二、使用Queue的示例代码
一、python的queue 模块
queue模块实现了各种多生产者-多消费者队列,可用于在执行的多个线程之间安全地交换信息。
queue模块定了3种不同的队列类。
Queue([maxsize])
创建一个FIFO先进先出队列。maxsize是队列中可以放入的项目的最大值。如果省略maxsize或将它置为0,队列大小将是无限大。
LifoQueue([maxsize])
创建一个LIFO后进先出队列,也叫做栈。
PriorityQueue([maxsize])
创建一个优先级队列,其中项目按照优先级从低到高依次排列。使用这种队列时,项目应该是(priority, data)形式的元组,其中priority是一个数字。
队列类的实例q具有以下方法:
- q.empty()
- q.full()
- q.put(item [, block [, timeout]])
- q.put_nowait(item)
- q.get([block [, timeout]])
- q.get_nowait()
- q.task_done()
- q.join()
使用队列一般可以简化多线程的程序。例如,可以使用共享队列将线程连接在一起,而不必依赖于必须有锁定保护的共享状态。在这种模型中,工作者线程一般充当数据的使用者。
二、使用Queue的示例代码
import threading
from queue import Queue
class WorkerThread(threading.Thread):
def __init__(self, *args, **kwargs):
threading.Thread.__init__(self, *args, **kwargs)
self.input_queue = Queue()
def send(self, item):
self.input_queue.put(item)
def close(self):
self.input_queue.put(None)
self.input_queue.join()
def run(self):
while True:
item = self.input_queue.get()
if item is None:
break
# 处理项目
print(item)
self.input_queue.task_done()
self.input_queue.task_done()
return
w = WorkerThread()
w.start()
w.send("hello")
w.send("world")
w.close()
更多推荐
Python并发编程之Queue队列
发布评论