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_生产者消费者实例

Python队列queue模块的更多相关文章

  1. Python 单向队列Queue模块详解

    Python 单向队列Queue模块详解 单向队列Queue,先进先出 '''A multi-producer, multi-consumer queue.''' try: import thread ...

  2. Python中Queue模块及多线程使用

    Python的Queue模块提供一种适用于多线程编程的FIFO实现.它可用于在生产者(producer)和消费者(consumer)之间线程安全(thread-safe)地传递消息或其它数据,因此多个 ...

  3. Python之队列queue模块使用 常见问题与用法

    python 中,队列是线程间最常用的交换数据的形式.queue模块是提供队列操作的模块,虽然简单易用,但是不小心的话,还是会出现一些意外. 1. 阻塞模式 import queue q = queu ...

  4. Python 双向队列Deque、单向队列Queue 模块使用详解

    Python 双向队列Deque 模块使用详解 创建双向队列Deque序列 双向队列Deque提供了类似list的操作方法: #!/usr/bin/python3 import collections ...

  5. Python之Queue模块

    Queue 1.创建一个“队列”对象 >>> import Queue >>> queue = Queue.Queue(maxsize=100) >>& ...

  6. python socket非阻塞及python队列Queue

    一. python非阻塞编程的settimeout与setblocking+select 原文:www.th7.cn/Program/Python/201406/214922.shtml 侧面认证Py ...

  7. Python|队列Queue

    一 前言 本文算是一次队列的学习笔记,Queue 模块实现了三种类型的队列,它们的区别仅仅是队列中元素被取回的顺序.在 FIFO 队列中,先添加的任务先取回.在 LIFO 队列中,最近被添加的元素先取 ...

  8. 同步队列-Queue模块解析

    Queue模块解决了生产者.消费者问题,在多线程编程中进行线程通信的时候尤其有用,Queue类封装了加锁解锁的过程.         在Queue模块中有三种不同的队列类,区别是不同队列取出数据的顺序 ...

  9. Python之queue模块以及生产消费者模型

    队列 队列类似于一条管道,元素先进先出,进put(arg),取get() 有一点需要注意的是:队列都是在内存中操作,进程退出,队列清空,另外,队列也是一个阻塞的形态. 队列分类 队列有很多中,但都依赖 ...

随机推荐

  1. linux与windows下文件编码问题

    注:转换操作均在Linux终端进行操作 DOS与Unix格式转换 安装工具:dos2unix.unix2dos # ubuntu apt-get install dos2unix apt-get in ...

  2. kafka生产者和消费者api的简单使用

    kafka生产者和消费者api的简单使用 一.背景 二.需要实现的功能 1.生产者实现功能 1.KafkaProducer线程安全的,可以在多线程中使用. 2.消息发送的key和value的序列化 3 ...

  3. vue2强制刷新,解决页面不会重新渲染的问题

    问题描述: 在使用Vue框架开发时,在函数中改变了页面中的某个值,在函数中查看是修改成功了,但在页面中没有及时刷新改变后的值: 解决: 运用 this.$forceUpdate();  //强制刷新, ...

  4. Docker 制作Nginx镜像

    参考文章:https://www.jianshu.com/p/dc4cd0547d1e 镜像的制作方式有两种,一种是下载别人的镜像之后再制作成自己的镜像,一种是从头开始制作自己的镜像 第一种,下载别人 ...

  5. 阿里云ECI如何6秒扩容3000容器实例?

    引言 根据最新CNCF报告,有超过90%的用户在生产环境使用容器,并且有超过80%的用户通过Kubernetes管理容器.是不是我们的生产环境上了K8s就完美解决了应用部署的问题?IT界有句俗语,没有 ...

  6. Ubuntu 安装 mysql 报错 "update-alternatives: 错误: 候选项路径 /etc/mysql/mysql.cnf 不存在"

    解决方法: sudo cp /etc/mysql/my.cnf /etc/mysql/mysql.cnf 偷梁换柱-! 如果想更新mysql的源方法如下: wget http://dev.mysql. ...

  7. k8s入坑之路(11)kubernetes服务发现

    kubernetes访问场景 1.集群内部访问 2.集群内部访问外部 3.集群外部访问内部 1.集群内部访问 1.pod之间直接ip通讯(利用calico通过路由表经过三层将ip流量转发)由于容器之间 ...

  8. C++ 指针的引用和指向引用的指针

    指向引用的指针 简单使用指针的一个例子就是: int a = 1; int *p = &a; 预先强调: 没有指向引用的指针 原因: 因为引用 不是对象,没有地址. 但是指向引用的指针是什么形 ...

  9. Firefox火狐浏览器提示您的链接并不安全(解决办法)

    火狐浏览器不管访问什么,一直提示连接不安全 解决办法: 1.在Firefox地址栏输入"about:config",回车,进入如下图页面 点击"我了解此风险" ...

  10. PAT甲级1074 Reversing Linked List (25分)

    [程序思路] 先根据地址按顺序读入节点,入栈,当栈里的元素个数等于k时全部出栈,并按出栈顺序保存,最后若栈不为空,则全部出栈并按出栈的稀饭顺序保存,最后输出各节点 注意:输入的节点中有可能存在无用节点 ...