07-消息队列-常见判断
目标¶
- 能够说出queue的full() 和 empty() 的作用
- 能够使用qsize() 获取队列中消息的个数
1. 消息数量、判断是否为空、判断是否已满¶
- 消息数量 qsize(),注意队列每get() 一次,数量就会 - 1
# 导入模块
import multiprocessing
queue = multiprocessing.Queue(3)
# queue.put(值) 向消息队列中放入内容
# put的值几乎可以是任意类型
queue.put(1) # 放入第一个值
queue.put("hello") # 放入第二个值
queue.put([1, 2, 3]) # 放入第三个值
# 获取第一个值
print("取值前消息数量:", queue.qsize())
value1 = queue.get()
print(value1)
print("取值后消息数量:", queue.qsize())
- empty() 判断队列是否为空
# 导入模块
import multiprocessing
# 定义消息队列
# 如果不指定队列长度,则默认为最大,如果指定了消息队列的大小,则消息队列就有上限控制
# 此处的 Queue(3) 指的是放入3条消息
queue = multiprocessing.Queue(3)
# queue.put(值) 向消息队列中放入内容
# put的值几乎可以是任意类型
queue.put(1) # 放入第一个值
queue.put("hello") # 放入第二个值
queue.put([1, 2, 3]) # 放入第三个值
# 此处通过queue.empty() 获取队列是否已空,得到结果为True 看似队列已经空了
# 造成此种结果的原因是:获取是否为空的进程和放置值的进程同时执行,值未放进去,empty() 已经开始取值了...
result = queue.empty()
print(result)
解决办法:time.sleep(0.0001) 稍微休眠下
- full() 判断队列是否已满(消息数量达到设定上限,则为满)
# 导入模块
import multiprocessing
# 定义消息队列
# 如果不指定队列长度,则默认为最大,如果指定了消息队列的大小,则消息队列就有上限控制
# 此处的 Queue(3) 指的是放入3条消息
queue = multiprocessing.Queue(3)
# queue.put(值) 向消息队列中放入内容
# put的值几乎可以是任意类型
queue.put(1) # 放入第一个值
queue.put("hello") # 放入第二个值
result = queue.full() # False 表示未满
print(result)
queue.put([1, 2, 3]) # 放入第三个值
result = queue.full() # True 表示已满
print(result)
2.注意¶
- 队列已满,则无法放入值
queue.put_nowait()
- 队列已空,则无法获取值