Python队列queue模块

Python中queue模块常用来处理队列相关问题

队列常用于生产者消费者模型,主要功能为提高效率和程序解耦

1. queue模块的基本使用和相关说明

# -*- coding:utf-8 -*-
# Author:Wong Du

‘‘‘
队列常用于生产者消费者模型,
主要功能为提高效率和程序解耦
‘‘‘

import queue
"""实例化队列对象不同规则的三种方法"""
q1 = queue.Queue(maxsize=2)   # 先入先出
q2 = queue.LifoQueue(maxsize=3)     # 后入先出,Last in first out
q3 = queue.PriorityQueue(maxsize=5) # 根据存储数据的优先级决定谁先出队列

"""
添加数据进队列中,可添加str、list、tuple等
当添加的数据量超过队列上限的时候,程序会卡住,直到有人从队列中取出数据
若想让程序不卡住,可以用put_nowait添加数据和配置block或timeout的put参数
来让程序抛出异常,从而进行异常处理或其他操作
"""
q1.put("caiyun")
q1.put( [1, 2, 3, 4, 5] )
# q1.put_nowait(2)
# q1.put(2, block=False)
# q1.put(2, timeout=3)
q2.put("caiyun")
q2.put( (1, 2, 3, 4, 5) )
q3.put(("Wong", 123))
q3.put(("Caiyun", 322))
q3.put(("dudu", 98))

"""
获取队列中的数据,同理
当队列中没有数据的时候,程序会卡住,直到有人添加数据在队列中
若想让程序不卡住,可以用get_nowait添加数据和配置block或timeout的put参数
来让程序抛出异常,从而进行异常处理或其他操作
"""
print("\033[32;1mQueue Info\033[0m".center(35,‘-‘))
print(q1.get())
print(q1.get())
# q1.get_nowait()
# q1.get(block=False)
# q1.get(timeout=3)
print("\033[33;1mLifoQueue Info\033[0m".center(35,‘-‘))
print(q2.get())
print(q2.get())
print("\033[34;1mPriorityQueue Info\033[0m".center(35,‘-‘))
print(q3.get()[0])
print(q3.get())
# print(q3.get())

"""队列判断和计数,判断是否为空,是否已满,队列长度计数"""
print(q1.empty())
print(q1.full())
print(q3.qsize())

2. queue模块的简单应用

 1 # -*- coding:utf-8 -*-
 2 # Author:Wong Du
 3
 4 import time
 5 import queue
 6 import threading
 7
 8 q = queue.Queue(maxsize=10)
 9
10 def producer(pname):
11     count = 1
12     while True:
13         q.put("baozi%s" % count)
14         print("\033[31;1m[%s] 生产了 [baozi%s]...\033[0m" %(pname, count))
15         count += 1
16         time.sleep(0.5)
17
18 def consumer(cname):
19     while True:
20         print("\033[33;1m[%s] 收到了 [%s],并把它吃了...\033[0m" %(cname, q.get()))
21         time.sleep(2)
22
23 p1 = threading.Thread(target=producer, args=("Caiyun", ))
24 p1.start()
25
26 c1 = threading.Thread(target=consumer, args=("dudu", ))
27 c2 = threading.Thread(target=consumer, args=("wong", ))
28 c1.start()
29 # c2.start()

queue&threading_生产者消费者实例

原文地址:https://www.cnblogs.com/Caiyundo/p/9487857.html

时间: 2024-10-14 08:26:31

Python队列queue模块的相关文章

Python 单向队列Queue模块详解

单向队列Queue,先进先出 '''A multi-producer, multi-consumer queue.''' try: import threading except ImportError: import dummy_threading as threading from collections import deque from heapq import heappush, heappop from time import monotonic as time __all__ =

Python的并发并行[2] -> 队列 -> queue 模块

queue 模块 / queue Module 1 常量 / Constants Pass 2 函数 / Function Pass 3 类 / Class 3.1 Queue类 类实例化:queue = queue.Queue(maxsize=0) 类的功能:用于生成一个先入先出队列实例 传入参数: maxsize maxsize: int类型,队列的最大值,无空间时阻塞,未指定时为无限队列 返回参数: queue queue: instance类型,生成的先入先出队列实例 3.1.1 put

Python之queue模块

一.queue——同步的队列类 queue模块实现了多生产者,多消费者的队列.当 要求信息必须在多线程间安全交换,这个模块在 线程编程时非常有用 .Queue模块实现了所有要求的锁机制.  说了半天就是Queue模块主要是多线程,保证线程安全使用的. 这个类实现了三种类型的queue,区别仅仅在于进去和取出的位置.在一个FIFO(First In,First Out)队列中,先加先取.在一个LIFO(Last In First Out)的队列中,最后加的先出来(操作起来跟stack一样).pri

后台程序处理(二) python threading - queue 模块使用

由于协程没办法完成(一)中所说的任务模式 接下来就尝试一下使用线程和队列来实现一下这个功能 在实现之前,我们先明确一个问题--python的线程是伪并发的.同一时间只能有一个线程在运行.具体怎样的运作方式由解释器决定 然后回顾一下上一章遇到的问题--return以后,需要另外一个线程去检测之前的操作是否执行成功 因此程序的流程设计应该是这样的: 1 # 大致流程步骤如下 2 # 1.获取参数(接口被访问时触发) 3 request_data = request.form 4 # 2.根据参数查询

python队列Queue

Queue Queue是python标准库中的线程安全的队列(FIFO)实现,提供了一个适用于多线程编程的先进先出的数据结构,即队列,用来在生产者和消费者线程之间的信息传递 基本FIFO队列 class Queue.Queue(maxsize=0) FIFO即First in First Out,先进先出.Queue提供了一个基本的FIFO容器,使用方法很简单,maxsize是个整数,指明了队列中能存放的数据个数的上限.一旦达到上限,插入会导致阻塞,直到队列中的数据被消费掉.如果maxsize小

Python的Queue模块

1 NAME 2 Queue - A multi-producer, multi-consumer queue. 3 4 CLASSES 5 Queue 6 LifoQueue 7 PriorityQueue 8 exceptions.Exception(exceptions.BaseException) 9 Empty 10 Full 11 12 class Empty(exceptions.Exception) 13 | Exception raised by Queue.get(block

【[email protected]】queue模块-生产者消费者问题

python通过queue模块来提供线程间的通信机制,从而可以让线程分项数据. 个人感觉queue就是管程的概念 一个生产者消费者问题 1 from random import randint 2 from threading import Thread 3 from queue import Queue 4 from time import sleep 5 6 7 def writeq(queue): 8 print('starting put queue...') 9 queue.put('

python 3.x 学习笔记16 (队列queue 以及 multiprocessing模块)

1.队列(queue) 用法: import queue q = queue.Queue() #先进先出模式 q.put(1) #存放数据在q里 作用: 1)解耦    2)提高效率 class queue.Queue(maxsize=0)                        #先入先出class queue.LifoQueue(maxsize=0)                  #后进先出 class queue.PriorityQueue(maxsize=0)         

Python多线程(3)——Queue模块

Queue模块支持先进先出(FIFO)队列,支持多线程的访问,包括一个主要的类型(Queue)和两个异常类(exception classes). Python 2 中的Queue模块在Python 3中更名为 queue. Queue对象的创建 可以通过实例化Queue类型获得队列对象: q = Queue.Queue(maxsize=0) 创建新的队列,参数 maxsize 的含义是: 如果 maxsize > 0:当 q 中的元素达到 maxsize 个时,队列就满了,此时再有一个线程希望