21python实现简单的消息队列

 

 

from multiprocessing import Queue
'''
q=Queue(num)若括号中没有指定最大可接收的消息数量,或数量为负值,那么就代表可接收的消息数量没有上限(直到内存的尽头)。函数也是队列的初始化。
Queue.qsize()    返回当前队列包含的消息数量。
Queue.empty()    如果队列为空,返回 True,否则返回 False。
Queue.full()    如果队列满了,返回 True,否则返回 False。
Queue.get([block[, timeout]])    获取队列中的一条消息,然后将其从队列中移除,block 默认值为 True。如果 block 使用默认值,且没有设置 timeout(单位:秒),消息队列为空,
此时程序将被阻塞(停在读取状态),直到从消息队列读到消息为止,如果设置了 timeout,则会等待 timeout 秒,若还没有读取到任何消息,则抛出 Queue.Empty 异常。
Queue.get_nowait()    相当于 Queue.get(False)。
Queue.put(item, [block[, timeout]])    将 item 消息写入队列,block 默认值为 True。如果 block 使用默认值,且没有设置 timeout(单位:秒),
消息队列如果已经没有空间可写入,此时程序将被阻塞(停在写入状态),直到从消息队列腾出空间为止,如果设置了 timeout,则会等待 timeout 秒,若还没有空间,则抛出 Queue.full 异常。
Queue.put_nowait(item)    相当于 Queue.put(item, False)。
'''
if __name__ == '__main__':
    # 初始化一个Queue对象,最多可接收3条信息,也就是可以put 3条消息
    q = Queue(3)
    q.put('消息1')
    q.put('消息2')
    q.put('消息3')
    # 已经put满了3条消息,如果还要q.put() 程序将会阻塞等待,消息被拿出。

    # 判断消息是否为空,再读取;为空返回True,不为空返回False.
    if not q.empty():
        print('----从消息队列中获取消息--')
        # qszie()函数获取队列的消息个数
        for i in range(q.qsize()):
            # 按照先进先出的原则读取消息
            print(q.get())

 

posted @ 2023-09-24 20:39  冷夜O  阅读(139)  评论(0)    收藏  举报