鱼C论坛

 找回密码
 立即注册
查看: 3708|回复: 7

[技术交流] 多线程之queue模块

[复制链接]
发表于 2018-2-8 18:38:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 payton24 于 2018-2-9 01:06 编辑

官方文档:
https://docs.python.org/3.6/library/queue.html

队列是一种派生出来的列表,与一般列表相比,它具有先进先出(FIFO)的数据结构,即
最早进入队列的元素,最早被提取出来处理。队列只能从队尾插入元素,在队首删除元素。
就像在银行排队等待办事,最早被交到号的人第一个办理业务,其他人根据号码排队,直到
轮到他们为止。

python3中使用queue模块来实现队列的功能。一般会使用queue.Queue。
import queue                               #引入queue模块
q1 = queue.Queue(maxsize = 10)  #创建queue对象,队列长度为10。通过maxsize来制定队列长度。
q2 = queue.Queue()                     #创建queue对象,队列长度为无限。不指定maxsize,队列长度为无限。

将一个值放入队列中,插入位置为队尾。
q.put(10)  #此时放入的值为10,还可以放入其他类型值,例如字符串,列表,元组等。

将一个值从队列中取出,删除位置为队首。
q.get()  ##此时取出的值为10.

值得一提的是,由于队列的特性,队列通常用于多线程的通信。因为Queue每次使用get()获取数据以后,都会从内部
删除获取的数据,以保证下次不会获取到重复的数据,所以队列是线程安全的。
而列表或元组虽然可以作为线程的存储结构,但它们都是线程不安全的,需要自己加锁来保证线程安全。


常用方法还包括:
q.qsize()  #返回队列大小
q.full()   #若队列为满,返回True,否则返回False。注意,队列若含有元素,但没有达到maxsize,仍会返回False。
q.empty() #若队列为空,返回True,否则返回False
q.task_done()  #在完成工作后,函数会向队列发送信号
q.join()    #等到队列为空,再执行其他操作。

另外还有一个常用属性,如果想知道队列中具体的元素,可以使用:
游客,如果您要查看本帖隐藏内容请回复
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-2-8 20:02:18 | 显示全部楼层
要不是有锁,多线程真的是美滋滋。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-19 16:14:18 | 显示全部楼层
人生苦短
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-9 09:48:11 From FishC Mobile | 显示全部楼层
您好,有幸看到您的文章分享对队列,希望可以学习,多谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-9 13:40:35 From FishC Mobile | 显示全部楼层
我用派桑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-16 14:25:49 | 显示全部楼层
老哥,想问一下,我有一个循环+条件往队列里面put,如果一直为空,我get会不会报错?get需不需要加判断?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-16 19:17:20 From FishC Mobile | 显示全部楼层
飘花飞雪 发表于 2020-7-16 14:25
老哥,想问一下,我有一个循环+条件往队列里面put,如果一直为空,我get会不会报错?get需不需要加判断?

不会报错,程序会直接卡死
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-26 11:05:27 | 显示全部楼层
666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-11 22:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表