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

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

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

  1. # -*- coding:utf-8 -*-
  2. # Author:Wong Du
  3.  
  4. '''
  5. 队列常用于生产者消费者模型,
  6. 主要功能为提高效率和程序解耦
  7. '''
  8.  
  9. import queue
  10. """实例化队列对象不同规则的三种方法"""
  11. q1 = queue.Queue(maxsize=2) # 先入先出
  12. q2 = queue.LifoQueue(maxsize=3) # 后入先出,Last in first out
  13. q3 = queue.PriorityQueue(maxsize=5) # 根据存储数据的优先级决定谁先出队列
  14.  
  15. """
  16. 添加数据进队列中,可添加str、list、tuple等
  17. 当添加的数据量超过队列上限的时候,程序会卡住,直到有人从队列中取出数据
  18. 若想让程序不卡住,可以用put_nowait添加数据和配置block或timeout的put参数
  19. 来让程序抛出异常,从而进行异常处理或其他操作
  20. """
  21. q1.put("caiyun")
  22. q1.put( [1, 2, 3, 4, 5] )
  23. # q1.put_nowait(2)
  24. # q1.put(2, block=False)
  25. # q1.put(2, timeout=3)
  26. q2.put("caiyun")
  27. q2.put( (1, 2, 3, 4, 5) )
  28. q3.put(("Wong", 123))
  29. q3.put(("Caiyun", 322))
  30. q3.put(("dudu", 98))
  31.  
  32. """
  33. 获取队列中的数据,同理
  34. 当队列中没有数据的时候,程序会卡住,直到有人添加数据在队列中
  35. 若想让程序不卡住,可以用get_nowait添加数据和配置block或timeout的put参数
  36. 来让程序抛出异常,从而进行异常处理或其他操作
  37. """
  38. print("\033[32;1mQueue Info\033[0m".center(35,'-'))
  39. print(q1.get())
  40. print(q1.get())
  41. # q1.get_nowait()
  42. # q1.get(block=False)
  43. # q1.get(timeout=3)
  44. print("\033[33;1mLifoQueue Info\033[0m".center(35,'-'))
  45. print(q2.get())
  46. print(q2.get())
  47. print("\033[34;1mPriorityQueue Info\033[0m".center(35,'-'))
  48. print(q3.get()[0])
  49. print(q3.get())
  50. # print(q3.get())
  51.  
  52. """队列判断和计数,判断是否为空,是否已满,队列长度计数"""
  53. print(q1.empty())
  54. print(q1.full())
  55. print(q3.qsize())

2. queue模块的简单应用

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

    ---恢复内容开始--- 一.本单元两次作业的架构设计 第十三次作业:本次作业我创建了四个类,除去官方提供的Main和MyUmlInteraction类之外,还有Uclass和Ulinterface分 ...

  2. Noip模拟17 2021.7.16

    我愿称这场考试为STL专练 T1 世界线 巧妙使用$bitset$当作vis数组使用,内存不会炸,操作还方便,的确是极好的. 但是这个题如果不开一半的$bitset$是会炸内存的,因为他能开得很大,但 ...

  3. qwt使用细节

    在使用QWT进行二维曲线绘制,使用方法如下: class Plot: public QwtPlot { Q_OBJECT -- } 报错:error LNK2001: 无法解析的外部符号"p ...

  4. Python 检查当前运行的python版本 python2 python3

    检查当前运行的python版本,可以帮助程序选择运行python2还是python3的代码 import sys if sys.version > '3': PY3 = True else: P ...

  5. hdu 2200 Eddy's AC难题(简单数学。。)

    题意: N个人,每个人AC的题数都不一样. Eddy想从中选出一部分人(或者全部)分成两组.必须满足第一组中的最小AC数大于第二组中的最大AC数. 问共有多少种不同的选择方案. 思路: 简单数学.. ...

  6. Kubernetes(k8s)部署redis-cluster集群

    Redis Cluster 提供了一种运行 Redis 安装的方法,其中数据 在多个 Redis 节点之间自动分片. Redis Cluster 还在分区期间提供了一定程度的可用性,这实际上是在某些节 ...

  7. centos安装pm2报错

    报错信息: /usr/lib/node_modules/pm2/node_modules/chalk/source/index.js:103 ...styles, 这个问题其实很简单,就是npm和no ...

  8. VSCode PHP 开发环境配置 详细教程

    VSCode PHP 开发环境配置 详细教程 这篇文章主要介绍了VScode+PHPstudy配置PHP开发环境的步骤,整理了官方以及优秀第三方的内容,对于学习和工作有一定借鉴意义. 配置过程 第一步 ...

  9. WebRTC概念介绍

    WebRTC WebRTC(Web Real-Time Communication).Real-Time Communication,实时通讯. WebRTC能让web应用和站点之间选择性地分享音视频 ...

  10. RDD的详解、创建及其操作

    RDD的详解 RDD:弹性分布式数据集,是Spark中最基本的数据抽象,用来表示分布式集合,支持分布式操作! RDD的创建 RDD中的数据可以来源于2个地方:本地集合或外部数据源 RDD操作 分类 转 ...