Python 队列 queue
Python 队列
一、分类
1. Queue
标准队列,先进先出(FIFO),队尾插入,队头取元素。
2. LifoQueue
后进先出(first in last out)。与栈的类似
3. PriorityQueue
优先级队列,队列内的元素有次序之分,优先级越大,排队时间越短
二、常用方法
1. put(item[, block[, timeout]])
往队列中放数据,
- 如果可选的参数block为True且timeout为空对象(默认的情况,阻塞调用,无超时)。
- 如果timeout是个正整数,阻塞调用进程最多timeout秒,如果一直无空空间可用,抛出Full异常(带超时的阻塞调用)。
- 如果block为False,如果有空闲空间可用将数据放入队列,否则立即抛出Full异常
- 其非阻塞版本为put_nowait等同于put(item, False)
2. get([block[, timeout]])
从队列中移除并返回一个数据。block 跟 timeout 参数同put方法
其非阻塞方法为 get_nowait()
相当与 get(False)
3. task_done()
意味着之前入队的一个任务已经完成。由队列的消费者线程调用。每一个get()调用得到一个任务,接下来的task_done()调用告诉队列该任务已经处理完毕。
如果当前一个join()正在阻塞,它将在队列中的所有任务都处理完时恢复执行(即每一个由put()调用入队的任务都有一个对应的task_done()调用)。
4. join()
阻塞调用线程,直到队列中的所有任务被处理掉。
只要有数据被加入队列,未完成的任务数就会增加。当消费者线程调用task_done()(意味着有消费者取得任务并完成任务),未完成的任务数就会减少。当未完成的任务数降到0,join()解除阻塞。
三、应用场景
1. 背景
某 Python 系统中,某一时间需要处理批量的大文件,IO吞吐增大,且需要把数据传回 Java 后端系统,但是因为网络传输压力太大,导致网络连接常常摆烂,想着使用队列缓解一下压力。
2. 实现代码
使用哪种队列不是重点,代码实现逻辑都是一样的,只是消费顺序不一样罢了
import threading
import queue
import time
import datetimeupload_queue = queue.Queue(maxsize=2 << 9)def producer():"""模拟生成需要处理的数据:return: """count = 1while True:msg = "消息编号:{}".format(count)upload_queue.put(msg)count += 1if count % 10 == 0:print("即将睡眠 10 s")time.sleep(10)def consumer():"""队列消费者,逐条消费:return: """while True:msg = upload_queue.get()print(datetime.datetime.today())print("上传队列中有消息个数:{}".format(upload_queue.qsize()))print("接收到 =====>>>>> {}".format(msg))time.sleep(1)upload_queue.task_done()if __name__ == '__main__':# 设置线程,让他们之间形成生产 - 消费的闭环t1 = threading.Thread(target=producer, args=[])t1.start()t2 = threading.Thread(target=consumer, args=[])t2.start()
Python 队列 queue相关推荐
- Python队列Queue
Python队列Queue Queue是python标准库中的线程安全的队列(FIFO),提供了一个多线程的先进先出的数据结构,即队列,用来在生产者和消费者线程之间的信息传递. 常见方法 1.put( ...
- python队列queue不堵塞_python 队列(queue)阻塞
背景:python 队列 queue.Queue 或 multiprcessing.Queue 或其他队列在写入队列或从队列中读取元素时,都有可能会发生线程阻塞. 下面来说一下阻塞的类型,然后怎么避免 ...
- Python|队列Queue
一 前言 本文算是一次队列的学习笔记,Queue 模块实现了三种类型的队列,它们的区别仅仅是队列中元素被取回的顺序.在 FIFO 队列中,先添加的任务先取回.在 LIFO 队列中,最近被添加的元素先取 ...
- python队列queue不堵塞_python队列Queue
Queue Queue是python标准库中的线程安全的队列(FIFO)实现,提供了一个适用于多线程编程的先进先出的数据结构,即队列,用来在生产者和消费者线程之间的信息传递 基本FIFO队列 clas ...
- python队列Queue的详解
Process之间有时需要通信,操作系统提供了很多机制来实现进程间的通信. 1. Queue的使用 可以使用multiprocessing模块的Queue实现多进程之间的数据传递,Queue本身是一个 ...
- Python队列Queue详解,超详细
Queue queue模块简介 queue.Queue(maxsize=0) queue.LifoQueue(maxsize=0) queue.PriorityQueue(maxsize=0) que ...
- python queue 查询是否在队列中_python队列Queue的详解
Queue Queue是python标准库中的线程安全的队列(FIFO)实现,提供了一个适用于多线程编程的先进先出的数据结构,即队列,用来在生产者和消费者线程之间的信息传递 基本FIFO队列 clas ...
- python队列只能一个个读取吗_python队列Queue的详解
Queue Queue是python标准库中的线程安全的队列(FIFO)实现,提供了一个适用于多线程编程的先进先出的数据结构,即队列,用来在生产者和消费者线程之间的信息传递 基本FIFO队列 clas ...
- python queue put阻塞_python 队列(queue)阻塞
背景:python 队列 queue.Queue 或 multiprcessing.Queue 或其他队列在写入队列或从队列中读取元素时,都有可能会发生线程阻塞. 下面来说一下阻塞的类型,然后怎么避免 ...
最新文章
- 线上直播丨KDD 2021预训练Workshop,谷歌MSRA等5位顶尖研究者参与研讨
- 软件设计是怎样炼成的(6)——打造系统的底蕴(数据库设计)(上篇)
- 11月数据库排行:PostgreSQL起飞、三巨头分数持续低迷
- python opencv检测人脸
- spring boot(一)创建项目
- Python之区块链入门,揭秘比特币
- 3.1.3 操作系统覆盖技术与交换技术的思想
- Redis详解(三)——Redis持久化
- js事件的冒泡(bubble)机制说明
- 托马斯微积分 从入门到失望
- 细菌感染和抗生素使用
- Win10-64位上编译CodeLite13.0.0源码
- vue vue-element-ui组件 eltable 表头背景颜色
- 学透for循环-传统for循环与增强for循环
- JAVA 九大排序算法
- b站python弹幕签到_B站弹幕实时效果python
- 语音科学计算机,CalcVoice(语音科学计算器)
- 时区(Timezone)一览表
- 讲情怀的韦晓亮和他的科技教育因果论
- 维克森林大学计算机专业,维克森林大学研究生读几年?
热门文章
- leetcode649.Dota2参议院
- js解析MarkDown语法
- Windows 文件共享功能用法
- 微服务设计指导-实践springcloud+springboot+nacos+feign+hytrix
- 归一法的计算方法讲解_第七讲 归一法
- 云原生全景图详解系列:带你了解云原生技术图谱
- [IOS开发教程] IOS中用NSJSONSerialization来实现对JSON格式的解析
- DRPC实时请求应答服务
- Zookeeper watch机制原理
- HTML小游戏21 —— html5版暴打皮卡丘游戏(附完整源码)