Queue 实现生产者消费者模型(实例讲解)


Posted in Python onNovember 13, 2017

Python中,队列是线程间最常用的交换数据的形式。

Python Queue模块有三种队列及构造函数:

1、Python Queue模块的FIFO队列先进先出。 class Queue.Queue(maxsize)

2、LIFO类似于堆,即先进后出。 class Queue.LifoQueue(maxsize)

3、还有一种是优先级队列级别越低越先出来。 class Queue.PriorityQueue(maxsize)

此包中的常用方法(q = Queue.Queue()):

q.qsize() 返回队列的大小

q.empty() 如果队列为空,返回True,反之False

q.full() 如果队列满了,返回True,反之False

q.full 与 maxsize 大小对应

q.get([block[, timeout]]) 获取队列,timeout等待时间

q.get_nowait() 相当q.get(False)

非阻塞 q.put(item) 写入队列,timeout等待时间

q.put_nowait(item) 相当q.put(item, False)

q.task_done() 在完成一项工作之后,q.task_done() 函数向任务已经完成的队列发送一个信号

q.join() 实际上意味着等到队列为空,再执行别的操作

# coding=utf-8

import Queue
import threading
import time


q = Queue.Queue(maxsize=10) # 创建一个队列对象,长度限制为10,maxsize小于1就代表无限制


def producer(name):
  count = 1
  while True:
    q.put(count) # 将值放入队列中 默认block为True,无数据时调用线程暂停,否则抛出异常
    print "%s 生产了包子 %d" % (name, count)
    count += 1
    time.sleep(0.5)


def consumer(name):
  while True:
    conut_con = q.get() # 从队列中取值 默认block为True,无数据时调用线程暂停,否则抛出异常
    print "%s 吃掉了包子 %d" % (name, conut_con)
    time.sleep(2)


pro = threading.Thread(target=producer, args=("德源",))
con = threading.Thread(target=consumer, args=("xu",))
con2 = threading.Thread(target=consumer, args=("sx",))

pro.start()
con.start()
con2.start() # 开启线程

以上这篇Queue 实现生产者消费者模型(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python魔法方法-自定义序列详解
Jul 21 Python
python快速建立超简单的web服务器的实现方法
Feb 17 Python
更改Python的pip install 默认安装依赖路径方法详解
Oct 27 Python
对Pandas MultiIndex(多重索引)详解
Nov 16 Python
python实现简易动态时钟
Nov 19 Python
python实现多张图片拼接成大图
Jan 15 Python
用python生成与调用cntk模型代码演示方法
Aug 26 Python
Python TCPServer 多线程多客户端通信的实现
Dec 31 Python
Jupyter notebook命令和编辑模式常用快捷键汇总
Nov 17 Python
在vscode中启动conda虚拟环境的思路详解
Dec 25 Python
利用Selenium添加cookie实现自动登录的示例代码(fofa)
May 08 Python
详解python的内存分配机制
May 10 Python
python图像常规操作
Nov 11 #Python
python中实现k-means聚类算法详解
Nov 11 #Python
Python编程之基于概率论的分类方法:朴素贝叶斯
Nov 11 #Python
Python内存管理方式和垃圾回收算法解析
Nov 11 #Python
Python实现的人工神经网络算法示例【基于反向传播算法】
Nov 11 #Python
python中使用正则表达式的后向搜索肯定模式(推荐)
Nov 11 #Python
python基础练习之几个简单的游戏
Nov 10 #Python
You might like
MongoDB在PHP中的常用操作小结
2014/02/20 PHP
YII动态模型(动态表名)支持分析
2016/03/29 PHP
功能强大的PHP POST提交数据类
2016/07/15 PHP
实例讲解YII2中多表关联的使用方法
2017/07/21 PHP
PHP简单实现二维数组的矩阵转置操作示例
2017/11/24 PHP
PHP赋值的内部是如何跑的详解
2019/01/13 PHP
JSON JQUERY模板实现说明
2010/07/03 Javascript
在javaScript中关于submit和button的区别介绍
2013/10/20 Javascript
Seajs的学习笔记
2014/03/04 Javascript
jquery 按键盘上的enter事件
2014/05/11 Javascript
微信小程序 数据访问实例详解
2016/10/08 Javascript
jQuery的 $.ajax防止重复提交的两种方法(推荐)
2016/10/14 Javascript
vue.js国际化 vue-i18n插件的使用详解
2017/07/07 Javascript
微信小程序bindinput与bindsubmit的区别实例分析
2019/04/17 Javascript
使用Phantomjs和Node完成网页的截屏快照的方法
2019/07/16 Javascript
Element-UI中关于table表格的那些骚操作(小结)
2019/08/15 Javascript
highcharts.js数据绑定方式代码实例
2019/11/13 Javascript
javascript实现数字时钟效果
2021/02/06 Javascript
Python中关键字nonlocal和global的声明与解析
2017/03/12 Python
Django 忘记管理员或忘记管理员密码 重设登录密码的方法
2018/05/30 Python
python实现飞机大战微信小游戏
2020/03/21 Python
对Python中class和instance以及self的用法详解
2019/06/26 Python
python 整数越界问题详解
2019/06/27 Python
用Python批量把文件复制到另一个文件夹的实现方法
2019/08/16 Python
Python标准库:内置函数max(iterable, *[, key, default])说明
2020/04/25 Python
python读取图像矩阵文件并转换为向量实例
2020/06/18 Python
sklearn和keras的数据切分与交叉验证的实例详解
2020/06/19 Python
python 实现围棋游戏(纯tkinter gui)
2020/11/13 Python
一文彻底解决HTML5页面中长按保存图片功能
2019/06/10 HTML / CSS
怎样自定义一个异常类
2016/09/27 面试题
博士研究生自我鉴定范文
2013/12/04 职场文书
大学军训感言400字
2014/03/11 职场文书
社团活动总结报告
2014/06/27 职场文书
教师查摆问题自查报告
2014/10/11 职场文书
Python matplotlib绘制条形统计图 处理多个实验多组观测值
2022/04/21 Python
Nginx如何配置多个服务域名解析共用80端口详解
2022/09/23 Servers