`
qindongliang1922
  • 浏览: 2183817 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:117530
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:125921
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:59900
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:71301
社区版块
存档分类
最新评论

Python3.4模拟实现生产者消费者模式

阅读更多
散仙使用python3.4模拟实现的一个生产者与消费者的例子,用到的知识有线程,队列,循环等,源码如下:




import  queue
import time
import threading
import  random


q=queue.Queue(5)

#生产者
def pr():
    name=threading.current_thread().getName()
    print(name+"线程启动......")
    for i in range(100):
        t=random.randint(2,9)
        print(name,"睡眠时间: ",t)
        time.sleep(t);
        d="A"+str(i)
        print(name+"正在存第",i+1,"个数据: ",d)
        #q.put("A"+str(i),False,2000)
        q.put(d)
    print("生产完毕!")


#消费者
def co():
    name=threading.current_thread().getName()
    time.sleep(1)
    print(name+"线程启动......")

    while True:
        print(name+"检测到队列数量: ",q.qsize())
        t=random.randint(2,9)
        print(name,"睡眠时间: ",t)
        data=q.get();
        print(name+"消费一个数据: ",data)




p=threading.Thread(target=pr,name="生产者")
c=threading.Thread(target=co,name="消费者1")
c2=threading.Thread(target=co,name="消费者2")

p.start()
c.start()
c2.start()



在本例里面散仙启动了1个生产者线程,2个消费者线程,打印效果如下:


生产者线程启动......
生产者 睡眠时间:  4
消费者1线程启动......
消费者1检测到队列数量:  0
消费者1 睡眠时间:  2
消费者2线程启动......
消费者2检测到队列数量:  0
消费者2 睡眠时间:  3
生产者正在存第 1 个数据:  A0
生产者 睡眠时间:  9
消费者1消费一个数据:  A0
消费者1检测到队列数量:  0
消费者1 睡眠时间:  8
生产者正在存第 2 个数据:  A1
生产者 睡眠时间:  5
消费者2消费一个数据:  A1
消费者2检测到队列数量:  0
消费者2 睡眠时间:  7
生产者正在存第 3 个数据:  A2
生产者 睡眠时间:  8
消费者1消费一个数据:  A2
消费者1检测到队列数量:  0
消费者1 睡眠时间:  2
生产者正在存第 4 个数据:  A3
生产者 睡眠时间:  7
消费者2消费一个数据:  A3
消费者2检测到队列数量:  0
消费者2 睡眠时间:  9
生产者正在存第 5 个数据:  A4
生产者 睡眠时间:  2
消费者1消费一个数据:  A4
消费者1检测到队列数量:  0
消费者1 睡眠时间:  5
生产者正在存第 6 个数据:  A5
生产者 睡眠时间:  5
消费者2消费一个数据:  A5
消费者2检测到队列数量:  0
消费者2 睡眠时间:  6
生产者正在存第 7 个数据:  A6
生产者 睡眠时间:  7
消费者1消费一个数据:  A6
消费者1检测到队列数量:  0
消费者1 睡眠时间:  7
生产者正在存第 8 个数据:  A7
生产者 睡眠时间:  3
消费者2消费一个数据:  A7
消费者2检测到队列数量:  0
消费者2 睡眠时间:  8
生产者正在存第 9 个数据:  A8
生产者 睡眠时间:  2
消费者1消费一个数据:  A8
消费者1检测到队列数量:  0
消费者1 睡眠时间:  4
生产者正在存第 10 个数据:  A9
生产者 睡眠时间:  4
消费者2消费一个数据:  A9
消费者2检测到队列数量:  0
消费者2 睡眠时间:  5
生产者正在存第 11 个数据:  A10
生产者 睡眠时间:  2
消费者1消费一个数据:  A10
消费者1检测到队列数量:  0
消费者1 睡眠时间:  3
生产者正在存第 12 个数据:  A11
生产者 睡眠时间:  3
消费者2消费一个数据:  A11
消费者2检测到队列数量:  0
消费者2 睡眠时间:  3
生产者正在存第 13 个数据:  A12
生产者 睡眠时间:  3
消费者1消费一个数据:  A12
消费者1检测到队列数量:  0
消费者1 睡眠时间:  3
生产者正在存第 14 个数据:  A13
生产者 睡眠时间:  8
消费者2消费一个数据:  A13
消费者2检测到队列数量:  0
消费者2 睡眠时间:  7
生产者正在存第 15 个数据:  A14
生产者 睡眠时间:  3
消费者1消费一个数据:  A14
消费者1检测到队列数量:  0
消费者1 睡眠时间:  7
生产者正在存第 16 个数据:  A15
生产者 睡眠时间:  2
消费者2消费一个数据:  A15
消费者2检测到队列数量:  0
消费者2 睡眠时间:  9

从这个例子中,我们发现利用队列,来做同步时非常简单方便的,除此之外队列,还有如下几个方便的方法:
介绍一下此包中的常用方法:

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





分享到:
评论

相关推荐

    opencv-python 3.4.1.15 opencv-contrib-python 3.4.1.15 win64版

    opencv-python 3.4.1.15 opencv-contrib-python 3.4.1.15 win64版,opencv-python 3.4.1.15 opencv-contrib-python 3.4.1.15,支持版本:python3.4,3.5,3.6

    python3.4+pywin32 32位

    Python 3.4是Python编程语言的一个重要版本,发布于2015年,它引入了许多新特性并改进了已有的功能。Pywin32是一个Python扩展模块集合,专为在Windows平台上操作Windows API和COM(组件对象模型)设计。在Python 3.4...

    Python3.4解压包 win7_64

    Python3.4是Python编程语言的一个重要版本,发布于2014年,它在Python3系列中引入了一些新...了解这些知识点后,无论是初学者还是经验丰富的开发者,都能更好地利用这个压缩包来学习、开发或维护基于Python3.4的项目。

    python3.4 ( 32 64 位)

    在语法层面,Python 3.4 引入了 `with` 语句的上下文管理协议的增强,允许自定义类实现 `__enter__` 和 `__exit__` 方法,以便更好地控制资源的获取和释放。这使得编写更安全的文件操作或其他资源管理变得容易。 ...

    Python3.4 中文手册(官方文档 内附详细教程说明)

    这个版本的文档是学习Python3.4的基础资源,特别是对于初学者来说,它包含了详尽的教程和说明,能够帮助他们系统地掌握这门语言。 1. **基础语法**:Python3.4的中文手册会介绍基本的编程概念,如变量、数据类型...

    numpy for python3.4

    numpy for python3.4

    opencv-python3.4.1.15.zip

    《OpenCV-Python3.4.1.15:手把手教你解决安装难题》 OpenCV,全称Open Source Computer Vision Library,是一个开源的计算机视觉库,它包含了众多图像处理和计算机视觉的算法,广泛应用于图像分析、机器学习以及...

    python.exe PYTHON3.4

    python.exe PYTHON3.4

    Python3.4 官方教程

    总的来说,《Python3.4官方教程》是学习和进阶Python3.4不可或缺的资料,无论是初学者还是经验丰富的开发者,都能从中受益匪浅。通过阅读和实践,读者可以熟练掌握Python3.4的核心知识,为构建复杂的应用程序打下...

    Python 3.4 入门指南 官方中文版

    Python是一门简单易学,功能强大的编程语言。它具有高效的高级数据结构和简单而有效的面向对象...此外,用户必须要确定正在使用的是3.4版本,因为小编带来的是python3.4中文手册,专门针对使用该版本的用户进行学习的!

    python3.4(X64)matplotlib所需安装包

    这些依赖包在你提到的压缩包“python3.4matplotlib绘图包(X64)”中应该已经包含。 首先,我们来看`matplotlib`。这是Python最广泛使用的数据可视化库之一,它的设计灵感来源于MATLAB。matplotlib提供了一个命令式...

    python实现生产者消费者并发模型

    多线程实现生产者消费者模型:锁(Lock)、信号量(Semaphore、BoundedSemaphore)、条件(Condition)、队列(Queue)、事件(Event) 多进程程实现生产者消费者模型:信号量(Semaphore)、条件(Condition)、...

    python3.4配套的twisted

    python3.4配套的twisted,安装scrapy需要安装twisted,此版本对应python3.4

    python3.4.16490.1437702276.msi

    然而,有时候用户可能会遇到卸载问题,如标题所述,“python3.4.16490.1437702276.msi”可能无法正常卸载。这可能是由于多种原因,如安装程序损坏、注册表项未正确清理、与其他程序冲突或系统权限不足等。为了解决这...

    python3.4爬取网络图片

    python3.4爬取网络图片,然后写入文件的示例小程序

    python3.4打包exe文件

    Python3.4打包成exe文件是一项常见的需求,它允许开发者将Python程序转化为可以在没有Python环境的Windows系统上运行的独立可执行程序。这通常通过使用第三方工具如PyInstaller、cx_Freeze或Py2exe实现。下面我们将...

    python 3.4 64bit

    总之,Python 3.4 是一个稳定且功能丰富的版本,适合初学者和专业开发者。通过理解其特性并正确安装,你将能够继续你的编程旅程。如果在降级过程中遇到任何问题,记得查阅官方文档或在线社区获取帮助。

    opencv-python 3.4.3.18

    opencv-python 3.4.3.18

    windows 64位 python-3.4安装包

    Python拥有一个强大的标准库。Python语言的核心只包含数字、字符串、列表、字典、文件等常见类型和函数,而由Python标准库提供了系统管理、网络通信、文本处理、数据库接口、图形系统、XML处理等额外的功能。Python...

    python3.4绿化版

    Python 3.4 绿化版是一款轻量级的、便携式的 Python 开发环境,专为便于携带和快速使用而设计。绿化版通常指的是软件已经进行了一定程度的优化和封装,使得它无需安装即可在任何支持的系统上运行,减少了依赖性和...

Global site tag (gtag.js) - Google Analytics