消息队列queue

本文详细介绍了Python中消息队列queue模块的使用方法,包括三种不同类型的队列:先进先出队列、先进后出队列及优先级队列,并通过实例展示了队列的基本操作,如put和get方法。此外,还探讨了如何利用消息队列实现生产者消费者模型。
一、queue

在多线程编程中,程序的解耦往往是一个麻烦的问题,以及在socket网络编程中也会有这样的问题。recv 和send之间,如果服务端有消息,问题需要发送给客户端,而那边的recv 被主程序占用,而使用多线程加 队列queue,我们就可以把消息发送到queue,而不用管对方怎么处理是否处理,同样对于服务端。

  • 消息队列queue在多线程编程中是一个非常好用的模块。
1.1 几种不同的queue

先进先出:q1 = queue.Queue(maxsize= 0) # first in first out
先进后出: q2 = queue.FifoQueue(maxsize= 0) # last in first out
优先级队列: q3 = queue.PriorityQueue(maxsize= 0) #放入元组数据,第一个参数越小优先级越高

  • 队列的几种常用方法
  1. q.put(item, block= True, timeout= 0) #第一个参数为数据,第二个为是否阻塞,如队列满了,就阻塞住程序,不让放进去, 第三超时时间
  2. q.get(block= True, timeout= 0) #同理put, 队列为空阻塞,如果block为False就不阻塞。

  3. q.qsize() 查看当前队列长度,如当q.qsize()>0 时,你就去q.get()
  4. q.empty() 如果当前队列为空则返回True,也可用来检查队列中是否有任务等场景
  5. q.full() 同上队列满了返回True

>>> import queue
>>> q= queue.Queue(10)
>>> q.put(1)
>>> q.put(2)
>>> q.qsize()
2
>>> q.empty()
False
>>> q.full()
False
>>> q.get(block=False)
1
>>> q.get(block=False)
2
>>> q.get(block=False)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "E:\python35\lib\queue.py", line 161, in get
    raise Empty
queue.Empty

消息队列实现生产者消费者模型

转载于:https://www.cnblogs.com/shiqi17/p/9550477.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值