• 消息队列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
    

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

  • 相关阅读:
    Codeforces-799C-Fountains(分类讨论+线段树)
    HDU-3486-Interviewe(二分+RMQ)
    小技巧---查doc文档的index.html怎么用的和chm一样
    chm文件右边部分查看不了
    最长公共临时文档7
    拓展欧几里得临时文档5
    关于myeclipse代码提示的一些问题
    mysql--乱码
    三分--Football Goal(面积最大)
    printf的一个常用技巧
  • 原文地址:https://www.cnblogs.com/shiqi17/p/9550477.html
Copyright © 2020-2023  润新知