#队列有3中模式,先进先出,先进后出,优先级
1:先进先出import queue
q = queue.Queue()     #默认是先进先出q.put(12)q.put('jack')q.put({'name':'ok'})while True:    data = q.get()    print(data)
q = queue.Queue(maxsize = 2)     #队列数据只能存三个数据q.put(12)q.put('jack')q.put([1,2,3])q.put({'name':'ok'})   #存满三个数据超出后;就卡死在这,除非有另外一个线程取前面的数据

while True:    data = q.get()    print(data)

q = queue.Queue()
q.put(12)q.put('jack')q.put([1,2,3])q.put({'name':'ok'},False)      #False 队列满了提示报错

while True:    data = q.get(block=False)    #False 队列取完提示报错    print(data)
2:先进后出(LifoQueue)
q = queue.LifoQueue()q.put(12)q.put('jack')q.put([1,2,3])

while True:    data = q.get()      print(data)

3:优先级(PriorityQueue);谁小谁现出
q = queue.PriorityQueue()

q.put([3,12])      #列表第一个元素代表优先级q.put([2,'jack'])q.put([5,[1,2,3]])

while True:    data = q.get()    print(data)
其他一些操作:
此包中的常用方法(q = Queue.Queue()):
q.qsize() 返回队列的大小
q.empty() 如果队列为空,返回True,反之False
q.full() 如果队列满了,返回True,反之False
q.full 与 maxsize 大小对应
q.get([block[, timeout]]) 获取队列,timeout等待时间
q.get_nowait() 相当q.get(False)
非阻塞 q.put(item) 写入队列,timeout等待时间
q.put_nowait(item) 相当q.put(item, False)
q.task_done() 在完成一项工作之后,q.task_done() 函数向任务已经完成的队列发送一个信号
q.join() 实际上意味着等到队列为空,再执行别的操作
q = queue.PriorityQueue(maxsize=3)q.put([3,12])q.put([2,'jack'])q.put([5,[1,2,3]])

print(q.qsize())  #队列有多少值print(q.empty())  #是否为空,Falseprint(q.full())   #是否已经存满,如果是True(上面写了最大3个)q.get_nowait(22) 等价于  q.get(block=False)  #22随便放的数就可以了q.put_nowait(22) 等价于  q.put(block=False)
 
q.task_done() 和 q.join()示例
import time,randomimport queue,threading

q = queue.Queue()

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

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()


 

转载于:https://www.cnblogs.com/ajaxa/p/9134423.html

多线程利器-队列(queue)相关推荐

  1. PYTHON——多线程:队列Queue数据结构

    1.队列模块简介 队列是一种数据结构,用于存放数据,类似列表.它是先进先出模式(FIFO模式),类似管道一般: 单线程不需要用到队列Queue,它主要用在多线程之间的,Queue称为多线程利器. 列表 ...

  2. python多线程队列爬虫流程图_python 多线程爬虫 队列queue问题。

    思路是 先构造url列表 all_url 然后 for i in range(0, len(all_url)): urlqueue.put(all_url[i]) 然后get 做到每次从列表中取出ur ...

  3. 队列 一种数据结构(多线程利器)

    # 队列 一种数据结构(多线程利器) import queue # 导入对列模块 q = queue.Queue() # 创建一个对列对象,先进先出 # q = queue.Queue(3) # 创建 ...

  4. 多线程中的应用之队列(queue)

    队列queue 多应用在多线程中,对于多线程访问共享变量时,队列queue是线程安全的. 从queue队列的实现来看,队列使用了1个线程互斥锁(pthread.Lock()),以及3个条件标量(pth ...

  5. python queue 查询是否在队列中_python队列Queue的详解

    Queue Queue是python标准库中的线程安全的队列(FIFO)实现,提供了一个适用于多线程编程的先进先出的数据结构,即队列,用来在生产者和消费者线程之间的信息传递 基本FIFO队列 clas ...

  6. Python多线程和队列结合demo

    一.使用场景 大家都知道python的多线程不是真正的多线程,但是对于io类型的任务,多线程还是能发挥作用的.那么多个线程之间是如何进行变量共享的呢,很多时候我们可以借助queue模块,方便.今天就做 ...

  7. python判断队列是否为空_[python模块]队列queue

    一.队列queue 队列queue 多应用在多线程场景,多线程访问共享变量. 对于多线程而言,访问共享变量时,队列queue的线程安全的. 因为queue使用了一个线程锁(pthread.Lock() ...

  8. python 归纳 (十二)_并发队列Queue的使用

    # -*- coding: UTF-8 -*- """ 学习队列 Queue总结:1. 队列可以设置大小,也可以无限大小2. 空了,满了,读写时可以阻塞,也可以报错3. ...

  9. python队列只能一个个读取吗_python队列Queue的详解

    Queue Queue是python标准库中的线程安全的队列(FIFO)实现,提供了一个适用于多线程编程的先进先出的数据结构,即队列,用来在生产者和消费者线程之间的信息传递 基本FIFO队列 clas ...

最新文章

  1. 【设计模式】前端控制器模式
  2. lua打开是二进制代码_物联网的构建:使用Lua高级语言进行嵌入式开发
  3. c.语言 获取随机数,C 语言随机数获取
  4. AIX忘记root密码后,重设密码步骤
  5. 利用赫夫曼编码进行数据解压
  6. JavaSE第九天20160815
  7. JS流程图解决方案GoJS
  8. 在CentOS/RHEL 7.X安装 EPEL repo 的方法 1
  9. apktool 反编译 java_APK文件使用ApkTool解包反编译和重新打包及签名
  10. 代码中(C#)支持动态拼接SQL的参数化查询
  11. 一个api请求的流程
  12. Python:笨方法学 Python3-课程 41 笔记
  13. 计算机一级pdf百度云,计算机一级(实操).pdf
  14. 没有测量就没有管理,怀念DNW和复习盖洛普Q12
  15. java枚举类规范写法
  16. 阿里云平台购买域名 免费申请SSL证书
  17. format的几种用法
  18. 使用vuex实现一个简单的小应用
  19. GPGPU数学基础教程
  20. 实现Word公式和普通文本的批量互转

热门文章

  1. Python 技术篇-20行代码实现微信机器人斗图功能实例演示!斗图啦官网API调用方法
  2. VBS转化为exe可执行文件实例演示,vbs转exe工具推荐
  3. leetcode C++ 25. K 个一组翻转链表 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。
  4. 3. 定义10个字节的键盘缓冲区,然后键盘输入字符填满该缓冲区,做如下工作: (1)分别将输入键盘缓冲区的字符按数字,小写字母,大写字母,其他字符进行计数; 分别将这些计数值显示出来。 (2)分别将这
  5. 学习记录(电子信息专业)
  6. TensorFlow下载文件到当前目录
  7. 【量化投资】策略八(聚宽)
  8. Python将DataFrame的某一列作为index
  9. 如何理解JavaScript多个连续箭头函数书写方式
  10. matlab函数画图创建gui,如何在MATLAB中的函数内创建GUI?