zoukankan      html  css  js  c++  java
  • 51_并发编程-线程-队列

    一、队列
     
      这三种队列都是线程安全的,不会出现多个线程抢占同一个资源或数据的情况
     1 import queue #不需要通过threading模块里面导入,直接import queue就可以了,这是python自带的
     2 q=queue.Queue()
     3 q.put('first')
     4 q.put('second')
     5 q.put('third')
     6 # q.put_nowait() #没有数据就报错,可以通过try来搞
     7 print(q.get())
     8 print(q.get())
     9 print(q.get())
    10 # q.get_nowait() #没有数据就报错,可以通过try来搞
    11 '''
    12 结果(先进先出):
    13 first
    14 second
    15 third
    16 '''
    FIFO
     1 import queue
     2 
     3 q=queue.LifoQueue() #队列,类似于栈,栈我们提过吗,是不是先进后出的顺序啊
     4 q.put('first')
     5 q.put('second')
     6 q.put('third')
     7 # q.put_nowait()
     8 
     9 print(q.get())
    10 print(q.get())
    11 print(q.get())
    12 # q.get_nowait()
    13 '''
    14 结果(后进先出):
    15 third
    16 second
    17 first
    18 '''
    先进后出
     1 import queue
     2 
     3 q=queue.PriorityQueue()
     4 #put进入一个元组,元组的第一个元素是优先级(通常是数字,也可以是非数字之间的比较),数字越小优先级越高
     5 q.put((-10,'a'))
     6 q.put((-5,'a'))  #负数也可以
     7 # q.put((20,'ws'))  #如果两个值的优先级一样,那么按照后面的值的acsii码顺序来排序,如果字符串第一个数元素相同,比较第二个元素的acsii码顺序
     8 # q.put((20,'wd'))
     9 # q.put((20,{'a':11})) #TypeError: unorderable types: dict() < dict() 不能是字典
    10 # q.put((20,('w',1)))  #优先级相同的两个数据,他们后面的值必须是相同的数据类型才能比较,可以是元祖,也是通过元素的ascii码顺序来排序
    11 
    12 q.put((20,'b'))
    13 q.put((20,'a'))
    14 q.put((0,'b'))
    15 q.put((30,'c'))
    16 
    17 print(q.get())
    18 print(q.get())
    19 print(q.get())
    20 print(q.get())
    21 print(q.get())
    22 print(q.get())
    23 '''
    24 结果(数字越小优先级越高,优先级高的优先出队):
    25 '''
    优先级队列

    二、信号量

      

      信号量:控制同时能够进入锁内去执行代码的线程数量(进程数量),维护了一个计数器,刚开始创建信号量的时候假如设置的是4个房间,进入一次acquire就减1 ,出来一个就+1,如果计数器为0,那么其他的任务等待,这样其他的任务和正在执行的任务是一个同步的状态,而进入acquire里面去执行的那4个任务是异步执行的.
  • 相关阅读:
    WebRTC中的NetEQ
    VoIP基本原理
    NetEQ主要文件简介
    声纹识别
    杂记(2019.04.13)
    概率论基础复习
    机器学习复习:模型评估指标
    传统机器学习算法复习:逻辑回归、因子分解机和梯度提升树
    Tensorflow中循环神经网络及其Wrappers
    einsum:爱因斯坦求和约定
  • 原文地址:https://www.cnblogs.com/hq82/p/9875544.html
Copyright © 2011-2022 走看看