一. 生产者/消费者模式

概念:生产者产生一块数据,放到buffer中,与此同时,消费者在从buffer中取出并消耗这些数据

理解:像生活中厂家生产出产品,顾客购买消耗这些产品,buffer就是存放商品的仓库。

二. 生产者/消费者模式在python中的实现

相关模块:Queue模块

简单介绍:Python中,队列是线程间最常用的交换数据的形式之一。Queue模块是python中提供队列操作的模块。

原理:它创建一个"队列"对象(即用于存放数据的buffer), 然后不断产生数据并存入该"队列",同时也在不断

   地从该队列中取出数据。

具体函数

(1)创建一个队列对象

1 >>> import Queue
2 >>> q = Queue.Queue()

注:队列长度可为无限或有限。可通过Queue的构造函数的可选参数maxsize来设定队列长度。若maxsize小于1则表示队列长度无限,例:

(2)向队列中存入数据

方法: q.put(item, block=True, timeout=None)

>>> q.put('a')

注:put()有两个参数,第一个item为必需的,为插入项目的值;第二个block为可选参数,默认为1。

  如果队列当前为空且block为1,put()方法就使调用线程暂停,直到空出一个数据单元。如果block为0,put方法将引发Full异常。

(3)从队列中取出数据

方法: q.get(block=True, timeout=None)

>>> q.get()

注:get方法可选参数为block,默认为True。

  如果队列为空且block为True,get()就使调用线程暂停,直至有项目可用。如果队列为空且block为False,队列将引发Empty异常。

Queue.Queue中常用方法:

q.qsize()           返回队列的大小
q.empty()           如果队列为空,返回True,反之False
q.full()            如果队列已满,返回True,反之False。与 maxsize 大小对应
q.get([block[, timeout]]) 获取队列,timeout等待时间
q.get_nowait()         相当q.get(False) 非阻塞
q.put(item,timeout)    写入队列,timeout等待时间
q.put_nowait(item)      相当q.put(item, False)
q.task_done()         完成一项工作之后, 函数向任务已经完成的队列发送一个信号
q.join()            表示等到队列为空,再执行别的操作

实例测试:

#!/usr/bin/env python
#coding=utf-8import threading, time
import Queue    #导入消息队列模块
import random   #导入随机数模块,是为了模拟生产者与消费者速度不一致的情形

q = Queue.Queue()         #实例化一个队列对象,当有多个线程共享一个东西的时候就可以用它了def Producer():           #生产者函数for i in range(20):q.put(i)          #将结果放入消息队列中print '[+] Product %s' %itime.sleep(random.randrange(3))    #生产者的生产速度,3s内
def Consumer():           #消费者函数count = 0while count < 20:data = q.get()    #取用消息队列中存放的结果print '[-] Consume %s' %datacount += 1time.sleep(random.randrange(4))    #消费者的消费速度,4s内

producter = threading.Thread(target = Producer)
consumer = threading.Thread(target = Consumer)producter.start()
consumer.start()

运行结果:

       

python并行任务之生产消费模式相关推荐

  1. 线程的简单生产消费模式

    Student类 package july.star.thread14;/*** Student* @author MoXingJian* @email 939697374@qq.com* @date ...

  2. 简单生产消费模式的代码流程(Java代码)

    Student package july.star.thread12;/*** Student* @author MoXingJian* @email 939697374@qq.com* @date ...

  3. 异步简析之BlockingCollection实现生产消费模式

    目前市面上有诸多的产品实现队列功能,比如Redis.MemCache等... 其实c#中也有一个基础的集合类专门用来实现生产/消费模式 (生产模式还是建议使用Redis等产品) 下面是官方的一些资料和 ...

  4. python使用kafka生产和消费案例

    // confluent_kafka 使用案例 import json from confluent-kafka import Producertopic_name = "" co ...

  5. python nameko用于生产_用 Python、 RabbitMQ 和 Nameko 实现微服务

    "微服务是一股新浪潮" - 现如今,将项目拆分成多个独立的.可扩展的服务是保障代码演变的最好选择.在 Python 的世界里,有个叫做 "Nameko" 的框架 ...

  6. 如何让nginx执行python代码_生产环境部署Python语言代码(django+uwsgi+nginx)

    本文主要向大家介绍了生产环境部署Python语言代码(django+uwsgi+nginx),通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 基础环境不做介绍,在django开发w ...

  7. python如何训练模型生产_手把手教你用Python构建你的第一个多标签图像分类模型(附案例)...

    你正在处理图像数据吗?我们可以使用计算机视觉算法来做很多事情: 对象检测 图像分割 图像翻译 对象跟踪(实时),还有更多-- 这让我思考--如果一个图像中有多个对象类别,我们该怎么办?制作一个图像分类 ...

  8. NDK学习笔记-多线程与生产消费模式

    在做NDK开发的时候,很多情况下都是需要使用多线程的,一方面是提高程序运行效率,另一方面就是防止主线程阻塞 C的多线程 在C语言里,可以通过对于POSIX标准的运用,使得C语言执行多线程 提高程序的执 ...

  9. Redis实现消息队列之生产消费模式

    简单的介绍下消息队列,使用消息队列首先我们得有一个队列,那么这个队列之前讲过就是先进先出的一个数据结构:那么有了队列以后我们还需要有人在队列里面放东西,那么这个放东西的人我们称之为生产者:有了生产者对 ...

最新文章

  1. mysql存储过程表_mysql 存储过程,表
  2. pytorch ctcloss 参数详解
  3. Java精讲:生产者-消费者
  4. HBase 的存储结构
  5. 【IT笔试面试题整理】判断链表是否存在环路,并找出回路起点
  6. Oracle区分中文和英文,oracle中中英文段落划分实现
  7. scala中的二维数组_Scala中的多维数组
  8. 硬件创新需要去理解的点(精炼总结)
  9. 上海纽约大学计算机专业怎样,聚焦|对话上纽大计算机科学教授郭斯瑶
  10. 递归经典案例汉诺塔 python实现_python实现汉诺塔递归算法经典案例
  11. 《jdk8u源码分析》jvm.dll接口列表
  12. 网页端下载喜马拉雅音频
  13. 氪金玩家逸仙电商的高端困境
  14. Java Springboot 使用 OpenOffice 实现Excel转PDF
  15. 微型计算机外文文献,单片机外文文献翻译---微型计算机控制系统
  16. 【转载】30个高质量但免费的自学网站
  17. 电动车、船等 机械结构DIY
  18. 永久删除的文件如何恢复?
  19. uni-app使用vue-i18n实现国际化(中英文切换)
  20. smartfroms word编辑_word如何改变smartart word如何编辑smartart

热门文章

  1. 中波形过于密集_论高速公路波形护栏板外观设计的重要性
  2. java tomcat数据库连接池_tomcat配置数据库连接池2
  3. oracle-j2sdk1.8,CDH agent无法安装
  4. 一次PHP中SQL的Where子句无效问题的解决之旅
  5. 毕业生,管好你的档案和户口
  6. mysql密码加强_MySQL密码增强插件
  7. mysql 双机备份_mysql双机热备详解及延伸备份
  8. python插值算法实现_图像插值算法Opencv+python实现
  9. android 编译sdk,android编译sdk
  10. 找出游戏的必胜的策略(博弈论的学习)