AIOps 一场颠覆传统运维的盛筵
908
2022-11-06
python爬虫-25-python多线程安全队列Queue详解
1、python之Queue介绍Python中的queue模块中提供了同步的、线程安全的队列类,包括FIFO(先进先出)队列Queue,LIFO(后入先出)队列LifoQueue。这些队列都实现了锁原语(可以理解为原子操作,即要么不做,要么都做完),能够在多线程中直接使用。2、python之Queue方法初始化Queue(maxsize):创建一个先进先出的队列;初始化LifoQueue(maxsize):创建一个先进后出的队列;qsize():返回队列的大小;empty():判断队列是否为空;full():判断队列是否满了;get():从队列中取最后一个数据;put():将一个数据放到队列中。3、python之Queue实操3.1 创建一个先进先出的队列import queueimport randomq = queue.Queue(maxsize=5) # 创建先进先出队列,并指定只能存5个数据while True: if q.full(): # 判断队列是否满了 print("队列满了呀,放不进来数据咯") break else: Jier = random.random() # 生成一个随机数 print("往队列q中存入了数据:{}".format(Jier)) q.put(Jier) # 存放数据print("队列q的数据存储了{}个".format(q.qsize()))while True: if q.empty(): # 判断队列是否空了 print("队列q空了呀") break else: print("从队列q中取出了数据:{}".format(q.get())) # 取出数据运行结果如下:往队列q中存入了数据:0.16770815255552796往队列q中存入了数据:0.6629318061550314往队列q中存入了数据:0.1541872174654343往队列q中存入了数据:0.6109450539369857往队列q中存入了数据:0.23136112820862198队列满了呀,放不进来数据咯队列q的数据存储了5个从队列q中取出了数据:0.16770815255552796从队列q中取出了数据:0.6629318061550314从队列q中取出了数据:0.1541872174654343从队列q中取出了数据:0.6109450539369857从队列q中取出了数据:0.23136112820862198队列q空了呀从上面可以看到,数据确实是先存进队列的,先被取出来消耗掉了。3.2 创建一个先进后出的队列import queueimport randomq = queue.LifoQueue(maxsize=5)while True: if q.full(): print("队列满了呀,放不进来数据咯") break else: Jier = random.random() print("往队列q中存入了数据:{}".format(Jier)) q.put(Jier)print("队列q的数据存储了{}个".format(q.qsize()))while True: if q.empty(): print("队列q空了呀") break else: print("从队列q中取出了数据:{}".format(q.get()))运行结果如下:往队列q中存入了数据:0.057462853458912666往队列q中存入了数据:0.48150116771611506往队列q中存入了数据:0.5694934757701845往队列q中存入了数据:0.16658438449076918往队列q中存入了数据:0.67144559563464队列满了呀,放不进来数据咯队列q的数据存储了5个从队列q中取出了数据:0.67144559563464从队列q中取出了数据:0.16658438449076918从队列q中取出了数据:0.5694934757701845从队列q中取出了数据:0.48150116771611506从队列q中取出了数据:0.057462853458912666队列q空了呀可以看到当我们使用python中的Queue模块创建了一个先进后出的队列之后,确实是先存放的数据,最后被消耗了,对吧。至此,本文结束,相关内容每日更新。
往期推荐k8s部署-42-带你深入学习ingress-nginx(上)k8s部署-43-带你深入学习ingress-nginx(下)k8s部署-44-带你深入学习ingress-nginx(终)
发表评论
暂时没有评论,来抢沙发吧~