Python学习 Day54 Queue线程安全队列 03

Queue线程安全队列

一、Queue线程安全队列概述

Python内置的线程安全的模块叫queue

  • Queue是线程安全的队列,在使用时无需加锁,可以在多线程中直接使用
  • 队列也是实现线程间同步的方式
  • FIFO(先进先出)队列Queue
  • LIFO(后进先出)LifoQueue

二、Queue队列的常用函数

函数 描述
qsize() 返回队列的大小
empty() 判断队列是否为空
full() 判断队列是否满了
get() 从队列中取最先插入的数据
put() 将一个数据放到队列中
#创建一个队列,最多可以存放5个数据
q = Queue(5)
for i in range(4):
    q.put(i)
print('队列中实际数据的多少:',q.qsize())
#取出队列当中的数据
for _ in range(5): #_只记录循环次数,不做变量使用
    try:           #队列中只有4个元素,而当前要取5次,会造成阻塞,程序在取完所有数据后不会停止,直到再放入一个数据完成第5次取数
                   #所以在此处使用try...except...语句,使取完所有数后程序即结束
        print('取出的元素:',q.get(block=False)) #通过设置block=False参数,使程序取完队列当中的数据即退出
    except:
        print('数据已经取完,队列目前为空')
        break

if q.full():
    print('队列已满')
else:
    print('队列当前数据的个数为:',q.qsize(),'队列未满')

print('-----------------------------------------------')
q2 = Queue(5)
for i in range(6): #队列当中最多存放5个数据,而此处放入6个数据,程序会等待其中一个元素被取出后,放入第六个元素才会结束,程序又进入拥塞状态
    try:
        q2.put(i,block=False)
    except:
        print('队列已满')
        break
队列中实际数据的多少: 4
取出的元素: 0
取出的元素: 1
取出的元素: 2
取出的元素: 3
数据已经取完,队列目前为空
队列当前数据的个数为: 0 队列未满
-----------------------------------------------
队列已满

Process finished with exit code 0

三、Queue线程安全队列的使用

from queue import Queue
import random
import time
import threading

def add_value(q): #存数据
    while True:
        q.put(random.randint(100,1000))
        time.sleep(1)

def get_value(q): #取数据
    while True:
        print('取出了元素:{0}'.format(q.get()))

def start():
    q = Queue(10)
    t1 = threading.Thread(target=add_value,args=(q,))
    t2 = threading.Thread(target=get_value,args=(q,))
    t1.start()
    t2.start()

if __name__ == '__main__':
    start()

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/ShengXIABai/article/details/116800156
今日推荐