多线程利器-队列(queue)
#队列有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)相关推荐
- PYTHON——多线程:队列Queue数据结构
1.队列模块简介 队列是一种数据结构,用于存放数据,类似列表.它是先进先出模式(FIFO模式),类似管道一般: 单线程不需要用到队列Queue,它主要用在多线程之间的,Queue称为多线程利器. 列表 ...
- python多线程队列爬虫流程图_python 多线程爬虫 队列queue问题。
思路是 先构造url列表 all_url 然后 for i in range(0, len(all_url)): urlqueue.put(all_url[i]) 然后get 做到每次从列表中取出ur ...
- 队列 一种数据结构(多线程利器)
# 队列 一种数据结构(多线程利器) import queue # 导入对列模块 q = queue.Queue() # 创建一个对列对象,先进先出 # q = queue.Queue(3) # 创建 ...
- 多线程中的应用之队列(queue)
队列queue 多应用在多线程中,对于多线程访问共享变量时,队列queue是线程安全的. 从queue队列的实现来看,队列使用了1个线程互斥锁(pthread.Lock()),以及3个条件标量(pth ...
- python queue 查询是否在队列中_python队列Queue的详解
Queue Queue是python标准库中的线程安全的队列(FIFO)实现,提供了一个适用于多线程编程的先进先出的数据结构,即队列,用来在生产者和消费者线程之间的信息传递 基本FIFO队列 clas ...
- Python多线程和队列结合demo
一.使用场景 大家都知道python的多线程不是真正的多线程,但是对于io类型的任务,多线程还是能发挥作用的.那么多个线程之间是如何进行变量共享的呢,很多时候我们可以借助queue模块,方便.今天就做 ...
- python判断队列是否为空_[python模块]队列queue
一.队列queue 队列queue 多应用在多线程场景,多线程访问共享变量. 对于多线程而言,访问共享变量时,队列queue的线程安全的. 因为queue使用了一个线程锁(pthread.Lock() ...
- python 归纳 (十二)_并发队列Queue的使用
# -*- coding: UTF-8 -*- """ 学习队列 Queue总结:1. 队列可以设置大小,也可以无限大小2. 空了,满了,读写时可以阻塞,也可以报错3. ...
- python队列只能一个个读取吗_python队列Queue的详解
Queue Queue是python标准库中的线程安全的队列(FIFO)实现,提供了一个适用于多线程编程的先进先出的数据结构,即队列,用来在生产者和消费者线程之间的信息传递 基本FIFO队列 clas ...
最新文章
- 【设计模式】前端控制器模式
- lua打开是二进制代码_物联网的构建:使用Lua高级语言进行嵌入式开发
- c.语言 获取随机数,C 语言随机数获取
- AIX忘记root密码后,重设密码步骤
- 利用赫夫曼编码进行数据解压
- JavaSE第九天20160815
- JS流程图解决方案GoJS
- 在CentOS/RHEL 7.X安装 EPEL repo 的方法 1
- apktool 反编译 java_APK文件使用ApkTool解包反编译和重新打包及签名
- 代码中(C#)支持动态拼接SQL的参数化查询
- 一个api请求的流程
- Python:笨方法学 Python3-课程 41 笔记
- 计算机一级pdf百度云,计算机一级(实操).pdf
- 没有测量就没有管理,怀念DNW和复习盖洛普Q12
- java枚举类规范写法
- 阿里云平台购买域名 免费申请SSL证书
- format的几种用法
- 使用vuex实现一个简单的小应用
- GPGPU数学基础教程
- 实现Word公式和普通文本的批量互转
热门文章
- Python 技术篇-20行代码实现微信机器人斗图功能实例演示!斗图啦官网API调用方法
- VBS转化为exe可执行文件实例演示,vbs转exe工具推荐
- leetcode C++ 25. K 个一组翻转链表 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。
- 3.	定义10个字节的键盘缓冲区,然后键盘输入字符填满该缓冲区,做如下工作: (1)分别将输入键盘缓冲区的字符按数字,小写字母,大写字母,其他字符进行计数; 分别将这些计数值显示出来。 (2)分别将这
- 学习记录(电子信息专业)
- TensorFlow下载文件到当前目录
- 【量化投资】策略八(聚宽)
- Python将DataFrame的某一列作为index
- 如何理解JavaScript多个连续箭头函数书写方式
- matlab函数画图创建gui,如何在MATLAB中的函数内创建GUI?