队列get函数和get_nowait函数及异常捕获

import multiprocessing
import time

if __name__ == '__main__':
    # 创建消息队列
    # 3: 表示消息队列最大个数
    queue = multiprocessing.Queue(3)
    # 放入数据
    queue.put(1)
    queue.put("abc")
    queue.put(["abc", "456"])
    # 队列满了在放入数据, 就不能放入数据了,直到消息队列有空闲位置才能再放入数据
    # queue.put(("34", 90))
    # put_nowait: 不会等待队列有空闲位置再放入数据,如果数据放入不成功就直接崩溃
    # queue.put_nowait(("34", 90))
    # 建议: 放入数据使用put,因为比较安全不会崩溃

    # 查看队列是否是满的
    # result = queue.full()
    # print(result)
    # 坑点: 只使用put放入数据直接判断队列是否为空获取的结果不正确,因为没有等队列把数据写完直接就取获取了,那么这是队列是空的
    # for i in range(10000):
    #     print(i)
    # 解决办法: 1. 延时一段时间  2. 通过个数去判断
    # time.sleep(0.001)
    #
    if queue.qsize() == 0:  # mac 版本不能使用qsize()
        print("队列是空的")

    # result = queue.empty()
    # print(result)


    # 查看队列的个数
    size = queue.qsize()
    print("消息队列个数:", size)
    # 获取队列的数据
    value = queue.get()
    print(value)
    size = queue.qsize()
    print("消息队列个数:", size)
    # 获取队列的数据
    value = queue.get()
    print(value)
    size = queue.qsize()
    print("消息队列个数:", size)
    # 获取队列的数据
    value = queue.get()
    print(value)
    size = queue.qsize()
    print("消息队列个数:", size)

    # 队列为空, 使用get会等待,直到队列有数据以后再取值
    # value = queue.get()
    # print(value)
    # 队列为空,取值的时候不等待,但是取不到值那么直接崩溃了
    # value = queue.get_nowait()
    # print(value)
    # 建议: 获取队列的数据统一get,因为能保证代码不会有问题
  try:
        value = queue.get(timeout = 1)
    finally:
        print(value)
        size = queue.qsize()
        print("消息队列个数:", size)

        print("结束!")

当队列为空时,再调用get函数,程序会阻塞,导致无法正常执行后面的代码,程序也不会退出,可以用get_nowait函数,当队列为空,不会等待,直接抛出异常,若想输出后面的内容,可以用try…finally…捕获异常执行。附:(timeout = 1可作为函数的参数)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值