zoukankan      html  css  js  c++  java
  • 线程和进程中使用的队列

    线程和进程中使用的队列

    队列线程之间的通信 队列线程是安全的,不用加锁

    1、先进先出队列

    【1】
    from queue import Queue # 先进先出队列
    q = Queue(5)
    q.put(0)
    q.put(1)
    q.put(2)
    q.put(3)
    q.put(4)
    print('444444')
    q.put(5)
    print("55555")
    ---------------结果:
    444444
    队列满了放不进5,然后阻塞住了。
    【2】
    from queue import Queue # 先进先出队列
    q = Queue(5)
    q.put(0)
    q.put(1)
    q.put(2)
    q.put(3)
    q.put(4)
    print(q.get()) #0
    print(q.get())#1
    print(q.get())#2
    print(q.get())#3
    print(q.get())#4
    print(q.get())
    ------------结果:
    0
    1
    2
    3
    4
    队列空了没有数据可拿了,第6个get阻塞住了

    2、后进先出队列

    from queue import LifoQueue # 后进先出队列
    #last in first out 栈
    lfq = LifoQueue(4)
    lfq.put(1)
    lfq.put(3)
    lfq.put(2)
    print(lfq.get())
    print(lfq.get())
    print(lfq.get())
    ------------结果:
    2
    3
    1

    小结:
    #先进先出
    # 写一个server,所有的用户的请求放在队列里(谁先来就让它先做后面的操作)
    # 先来先服务的思想
    #后进先出
    # 算法
    #(那个三级菜单也是)

    3、优先级队列

    按照元组的第一个元素大小来排列取值的

    from queue import PriorityQueue
    pq = PriorityQueue()
    pq.put((10, '小马'))
    pq.put((5, '小冯'))
    pq.put((1, '小郭'))
    print(pq.get())
    print(pq.get())
    t=pq.get()
    print(t,type(t))
    -----------结果:
    (1, '小郭')
    (5, '小冯')
    (10, '小马') <class 'tuple'>

    小结:三个队列的使用场景
    #先进先出
    # 写一个server,所有的用户的请求放在队列里(谁先来就让它先做后面的操作)
    # 先来先服务的思想
    #后进先出
    # 算法
    #(那个三级菜单也是)
    优先级队列
    # 自动的排序
    # 抢票的用户级别 100000 100001
    # 告警级别

  • 相关阅读:
    通过WebRTC实现实时视频通信(三)
    通过WebRTC实现实时视频通信(二)
    通关机器学习,必须掌握的32种算法
    Github如何回退/回滚到某个版本
    Markdown语法与入门
    如何上传代码到github?
    Latex中如何设置字体颜色(3种方式)
    Package CJK Error: Invalid character code. 问题解决方法--xelatex和pdflatex编译的转换
    PyCharm快捷键
    最全PyCharm教程
  • 原文地址:https://www.cnblogs.com/machangwei-8/p/10908013.html
Copyright © 2011-2022 走看看