zoukankan      html  css  js  c++  java
  • Python--Queue

    线程队列:

      先入先出队列、后进先出队列、优先级队列

    先入先出:

     1 import queue # 导入模块
     2 
     3 q = queue.Queue() # 实例化一个队列
     4 q.put(1) # 向队列中插入数据
     5 q.put(2)
     6 q.put(3)
     7 
     8 while True: # 循环取数据
     9     if q.qsize() != 0: # 当队列大小不为0时则代表队列中有数据
    10         print(q.get()) # 获取数据并打印
    11     else:
    12         break # 当无数据时退出循环

    后进先出:

     1 import  queue # 导入模块
     2 
     3 # 后进先出
     4 q = queue.LifoQueue() # last in first out
     5 q.put(1)
     6 q.put(2)
     7 q.put(3)
     8 
     9 print(q.get()) # 直接取数据,当取不到数据时,程序会阻塞
    10 print(q.get_nowait())  # # 直接取数据,当取不到数据时,程序会报错:_queue.Empty
    11 print(q.get())
    12 print(q.get_nowait())

    优先级队列:

     1 import  queue
     2 
     3 # 根据消息优先级取数据
     4 q = queue.PriorityQueue() # 实例化优先级队列
     5 q.put((1,'a')) # 向队列中加数据,并设置优先级
     6 q.put((-1,'b'))
     7 q.put((10,'c'))
     8 q.put((3,'z'))
     9 
    10 print(q.get_nowait())
    11 print(q.get_nowait())
    12 print(q.get_nowait())
    13 print(q.get_nowait())
    14 
    15 # -----------------------------
    16 (-1, 'b')
    17 (1, 'a')
    18 (3, 'z')
    19 (10, 'c')

    设置队列空间大小

     1 import  queue
     2 import time
     3 # 设置队列大小
     4 q = queue.Queue(maxsize=8) # 设置队列最大值为8,队列中最多同时存在8条数据
     5 
     6 for i in range(10):
     7     if i < q.maxsize:
     8         q.put(i)
     9 
    10 while q.qsize() != 0:
    11     print(q.get())
    12     time.sleep(0.5)
    13 
    14 #-----------------------------
    15 0
    16 1
    17 2
    18 3
    19 4
    20 5
    21 6
    22 7

    生产者消费者模型示例:

     1 import  threading,time,queue
     2 
     3 q = queue.Queue(maxsize=10) # 实例化一个先入先出的队列,并设置队列大小为10
     4 
     5 
     6 def Producter(name):
     7     count = 1
     8     while count <= 20:
     9         q.put("骨头%s" % count)
    10         print("%s生产出骨头--%s" % (name,count))
    11         count += 1
    12 
    13 def Consumer(name):
    14     while True:
    15         if q.qsize() != 0:
    16             print("[%s] 取到了骨头[%s]并把它吃了" %(name,q.get()))
    17             time.sleep(1)
    18         else:
    19             print("%s:今天的骨头吃完了,嘤嘤嘤!!!"%name)
    20             break
    21 
    22 yy = threading.Thread(target=Producter,args=('yy',)) #实例化一个生产者线程
    23 tj = threading.Thread(target=Consumer,args=('tj',)) #实例化一个消费者线程
    24 xl = threading.Thread(target=Consumer,args=('xl',)) #实例化另一个消费者线程
    25 yy.start() # 启动生产者线程
    26 tj.start() # 启动消费者线程1
    27 xl.start() # 启动消费者线程2
  • 相关阅读:
    汕头市队赛 SRM1X T1
    夏令营
    路上路径求和
    USACO 刷题记录bzoj
    整除
    Xor路
    超低延时安防直播系统webrtc-client在浏览器播放没有音频的问题如何排查解决?
    如何使用TSINGSEE青犀视频同屏功能组件EasyScreenLive通过sdk推流到腾讯云直播?
    网络穿透/云端组网/视频拉转推服务EasyNTS上云网关运维中数据库检测功能的介绍
    【解决方案】变电站智慧消防如何实现远程集中监控?EasyCVR变电站安全综合管理系统搭建
  • 原文地址:https://www.cnblogs.com/sunnytomorrow/p/13528844.html
Copyright © 2011-2022 走看看