Queue:共享消息队列
Queue 模块来提供进程间通信的机制,从而让线程之间可以互相分享数据。
queue队列
有三种模式
-
Queue(maxsize=0)
- 创建一个先入先出的队列,没有给定最大值即无限队列
-
LifoQueue(maxsize=0)
- 创建一个先入后出的队列,没有给定最大值即无限队列
-
PriorityQueue(maxsize=0)
- 创建一个优先级队列,没有给定最大值即无限队列
属性与异常
- 异常
Empty 当对空队列调用get()方法时抛出异常
Full 当对已满的队列调用put()方法时抛出异常
- 属性
qsize() 返回队列大小(由于返回时队列大小可能被其他线程修改,所以该值为近似值)
empty() 如果队列为空,则返回True;否则,返回False
full() 如果队列已满,则返回True;否则,返回False
put(item, block=Ture, timeout=None) 将item 放入队列。如果block 为True(默认)且timeout 为None,则在有可用空间之前阻塞;如果timeout 为正值,则最多阻塞timeout 秒;如果block 为False,则抛出Empty 异常
put_nowait(item) 和put(item, False)相同,即非阻塞
get (block=True, timeout=None) 从队列中取得元素。如果给定了block(非0),则一直阻塞到有可用的元素为止
get_nowait() 和get(False)相同,即非阻塞
- 生产者消费者模型
from multiprocessing import Process, Queue
def consumer(q):
'''
消费者
'''
for i in range(10):
res = q.get()
print('取出来%s'%res)
def producer(q):
'''
生产者
'''
for i in range(10):
res = q.put(i+10) # 成功则会返回none
print('放进去:%s'%res)
def main():
q = Queue()
process_producer = Process(target=producer, args=(q,))
process_consumer = Process(target=consumer, args=(q,))
process_producer.start()
process_consumer.start()
process_producer.join()
process_consumer.join()
if __name__ == '__main__':
main()