1. #队列有3中模式,先进先出,先进后出,优先级
  1. 1:先进先出
    import queue
  1. q = queue.Queue() #默认是先进先出
    q.put(12)
    q.put('jack')
    q.put({'name':'ok'})
    while True:
    data = q.get()
    print(data)
  2.  
  1. q = queue.Queue(maxsize = 2) #队列数据只能存三个数据
    q.put(12)
    q.put('jack')
    q.put([1,2,3])
    q.put({'name':'ok'}) #存满三个数据超出后;就卡死在这,除非有另外一个线程取前面的数据
  2.  
  3. while True:
    data = q.get()
    print(data)
  4.  
  5. q = queue.Queue()
  1. q.put(12)
    q.put('jack')
    q.put([1,2,3])
    q.put({'name':'ok'},False) #False 队列满了提示报错
  2.  
  3. while True:
    data = q.get(block=False) #False 队列取完提示报错
    print(data)
  1. 2:先进后出(LifoQueue)
  1. q = queue.LifoQueue()
    q.put(12)
    q.put('jack')
    q.put([1,2,3])
  2.  
  3. while True:
    data = q.get()
    print(data)
  4.  
  5. 3:优先级(PriorityQueue);谁小谁现出
  1. q = queue.PriorityQueue()
  2.  
  3. q.put([3,12]) #列表第一个元素代表优先级
    q.put([2,'jack'])
    q.put([5,[1,2,3]])
  4.  
  5. while True:
    data = q.get()
    print(data)
  1. 其他一些操作:
  1. 此包中的常用方法(q = Queue.Queue()):
  2. q.qsize() 返回队列的大小
  3. q.empty() 如果队列为空,返回True,反之False
  4. q.full() 如果队列满了,返回True,反之False
  5. q.full maxsize 大小对应
  6. q.get([block[, timeout]]) 获取队列,timeout等待时间
  7. q.get_nowait() 相当q.get(False)
  8. 非阻塞 q.put(item) 写入队列,timeout等待时间
  9. q.put_nowait(item) 相当q.put(item, False)
  10. q.task_done() 在完成一项工作之后,q.task_done() 函数向任务已经完成的队列发送一个信号
  11. q.join() 实际上意味着等到队列为空,再执行别的操作
  1.  
  1. q = queue.PriorityQueue(maxsize=3)
    q.put([3,12])
    q.put([2,'jack'])
    q.put([5,[1,2,3]])
  2.  
  3. print(q.qsize()) #队列有多少值
    print(q.empty()) #是否为空,False
    print(q.full()) #是否已经存满,如果是True(上面写了最大3个)
    q.get_nowait(22) 等价于 q.get(block=False) #22随便放的数就可以了
    q.put_nowait(22) 等价于 q.put(block=False)
  1.  
  1. q.task_done() q.join()示例
  1. import time,random
    import queue,threading
  2.  
  3. q = queue.Queue()
  4.  
  5. def Producer(name):
    count = 0
    while count <10:
    print("making........")
    time.sleep(2)
    q.put(count)
    print('Producer %s has produced %s baozi..' %(name, count))
    count +=1
    q.task_done() #这里面发送一个完成的信息给队里q (q.join() )
    print("ok......")
    def Consumer(name):
    count = 0
    while count <10:
    q.join() #这里面接收到队里q有完成的信息后,就接着运行下面代码,不然会一直在这卡死状态,等待上面生成完包子的信息(同理如果这是q.task_done(),就会产生吃完包子的消息,上面q.join()接收消息后接着生产)
    data = q.get()
    print('\033[32;1mConsumer %s has eat %s baozi...\033[0m' %(name, data))
    count +=1
  6.  
  7. p1 = threading.Thread(target=Producer, args=('A',))
    c1 = threading.Thread(target=Consumer, args=('B',))
    c2 = threading.Thread(target=Consumer, args=('C',))
    # c3 = threading.Thread(target=Consumer, args=('D',))
    p1.start()
    c1.start()
    c2.start()
    # c3.start()
  1.  
  1.  
  1.  

多线程利器-队列(queue)的更多相关文章

  1. 消息队列queue

    一.queue 在多线程编程中,程序的解耦往往是一个麻烦的问题,以及在socket网络编程中也会有这样的问题.recv 和send之间,如果服务端有消息,问题需要发送给客户端,而那边的recv 被主程 ...

  2. Python进阶【第二篇】多线程、消息队列queue

    1.Python多线程.多进程 目的提高并发 1.一个应用程序,可以有多进程和多线程 2.默认:单进程,单线程 3.单进程,多线程 IO操作,不占用CPU python的多线程:IO操作,多线程提供并 ...

  3. Ruby:多线程队列(Queue)下载博客文章到本地

    Ruby:多线程下载博客文章到本地的完整代码 #encoding:utf-8 require 'net/http' require 'thread' require 'open-uri' requir ...

  4. 041队列queue(重要,多线程使用)

    内容:队列类型.方法.使用 ###############queue定义了3种信息列队模式类Queue([maxsize]):FIFO列队模式LifoQueue([maxsize]):LIFO列队模式 ...

  5. python多线程--优先级队列(Queue)

    Python的Queue模块中提供了同步的.线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue,和优先级队列PriorityQueue.这些队列都实现 ...

  6. 【java】Java多线程总结之线程安全队列Queue【转载】

    原文地址:https://www.cnblogs.com/java-jun-world2099/articles/10165949.html ============================= ...

  7. python笔记9 线程进程 threading多线程模块 GIL锁 multiprocessing多进程模块 同步锁Lock 队列queue IO模型

    线程与进程 进程 进程就是一个程序在一个数据集上的一次动态执行过程.进程一般由程序.数据集.进程控制块三部分组成.我们编写的程序用来描述进程要完成哪些功能以及如何完成:数据集则是程序在执行过程中所需要 ...

  8. 网络编程基础--多线程---concurrent.futures 模块---事件Event---信号量Semaphore---定时器Timer---死锁现象 递归锁----线程队列queue

    1 concurrent.futures 模块: # from abc import abstractmethod,ABCMeta # # class A(metaclass=ABCMeta): # ...

  9. Java多线程 阻塞队列和并发集合

    转载:大关的博客 Java多线程 阻塞队列和并发集合 本章主要探讨在多线程程序中与集合相关的内容.在多线程程序中,如果使用普通集合往往会造成数据错误,甚至造成程序崩溃.Java为多线程专门提供了特有的 ...

随机推荐

  1. 剑指Offer 41. 和为S的连续正数序列 (其他)

    题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久,他 ...

  2. 重开ES6

    一.ES6的开发环境搭建 现在的Chrome浏览器已经支持ES6了,但是有些低版本的浏览器还是不支持ES6的语法,这就需要我们把ES6的语法自动的转变成ES5的语法. 1.建立工程目录: 先建立一个项 ...

  3. 2017-2018 ACM-ICPC NEERC B题Berland Army 拓扑排序+非常伤脑筋的要求

    题目链接:http://codeforces.com/contest/883/problem/B There are n military men in the Berland army. Some ...

  4. 在Scrapy中使用selenium

    在scrapy中使用selenium 在scrapy中需要获取动态加载的数据的时候,可以在下载中间件中使用selenium 编码步骤: 在爬虫文件中导入webdrvier类 在爬虫文件的爬虫类的构造方 ...

  5. 初识vue小结

    初识vue 大家都那么热爱他一定有原因,我也特想了解. 我来咯, 首先用vue开发版,用一个标签在head中插入,script标签src属性引入vue文件,就像jquey一样在script,但是放在h ...

  6. 查看Linux磁盘空间

    df -hl 查看磁盘剩余空间 df -h 查看每个根路径的分区大小 du -sh [目录名] 返回该目录的大小 du -sm [文件夹] 返回该文件夹总M数 du -h [目录名] 查看指定文件夹下 ...

  7. 基于tensorflow的简单线性回归模型

    #!/usr/local/bin/python3 ##ljj [1] ##linear regression model import tensorflow as tf import matplotl ...

  8. docker lamp

    可以直接使用官方镜像搭建LAMP环境从官方下载PHP+Apache镜像和MySQL两个镜像来组成(如:php:7.2.3-apache-stretch和mysql:5.7.21)docker pull ...

  9. PHP如何判断一个数组是一维还是多维

    什么叫多维数组呢?多维数组,本质上是以数组作为数组元素的数组. 二维数组又称为矩阵,一个数组的元素如果是一维数组,那么我们就称这个数组是二维数组. 怎么判断一个数组是否是一维数组呢?通过count() ...

  10. ubuntu18关闭系统自动更新

    ubuntu18.04关闭系统自动更新有两个方法:1.修改配置文件 修改配置文件/etc/apt/apt.conf.d/10periodic#0是关闭,1是开启,将所有值改为0vi etc/apt/a ...