zoukankan      html  css  js  c++  java
  • 消息队列queue

    一、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:python35libqueue.py", line 161, in get
        raise Empty
    queue.Empty
    

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

  • 相关阅读:
    java笔记之IO详解——序列流
    java笔记之IO详解——输出字符流
    java笔记之IO详解——输入字符流
    java笔记之IO详解——输出字节流
    Nginx同一个域名部署多个项目
    服务器安装mongo数据库
    服务器安装node
    服务器Nginx配置及文件目录
    笔记 [待整理]
    vue-cli3打包app物理按键失效的问题[已解决]
  • 原文地址:https://www.cnblogs.com/shiqi17/p/9550477.html
Copyright © 2011-2022 走看看