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

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的安装包

    python3.4 安装包 windows操作系统下的python软件,经测试能正常使用

    opencv-python 3.4.1.15及 opencv-contrib-python 3.4.1.15 win64版文件

    适用于Windows64位,对应Python 3.6版本,OpenCV为3.4.1.15版本;内含有《opencv_contrib_python-3.4.1.15-cp36-cp36m-win_amd64.whl》和《opencv_python-3.4.1.15-cp36-cp36m-win_amd64.whl》两个文件

    numpy for python3.4

    numpy for python3.4

    Python3.4 Numpy安装包

    Windows64位,Python3.4,Numpy安装包。 安装前请配置相应环境变量,在Dos下执行命令进行安装。 可参考安装教程:https://blog.csdn.net/Katrina_ALi/article/details/64922107

    python.exe PYTHON3.4

    python.exe PYTHON3.4

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

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

    Python 3.4 入门指南 官方中文版

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

    python3.4 ( 32 64 位)

    python3.4 版本 32位 64位

    Python3.4官方入门指南

    Python3.4官方入门指南,入门必看的书籍,基于Python3.x

    python3.4配套的twisted

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

    python 3.4 64位安装包集合

    python 3.4 64位安装包集合,安装最新版遇到set up failed时用。 (python-3.4.4.amd64,pywin32-221.win-amd64-py3.4,WMI-1.4.9.win32)

    opencv-python和opencv_contrib_python3.4.1.15.zip

    opencv-python3.4.1.15 opencv-contrib-python3.4.1.15 在这版本之后opencv的sift算法被申请了专利保护 这是bilibili上opencv课程的资源

    python3.4打包exe文件

    可以将Python3.4版本的py文件打包成exe,内附使用说明

    python3.4爬取网络图片

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

    Linux下安装Python3.4

    3.安装Python 3.4,运行命令:sudo apt-get install python3.4。 4.安装完成后,可以通过运行命令python3.4 --version来验证Python 3.4是否正确安装。 以上步骤适用于大多数Linux发行版,但具体操作可能会因系统版本...

    opencv-python 3.4.3.18

    opencv-python 3.4.3.18

    Python3.4解压包 win7_64

    该压缩包是本人自己下载并安装的python3.4安装目录的压缩包,包括了很多第三方包,特别是Cryptodome这个第三方包。

    windows 64位 python-3.4安装包

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

    Python3.4+scipy+matplotlib

    Python科学计算基本模块安装文件,包括Python3.4、scipy和matplotlib,均是whl文件,由于上传文件大小限制,numpy文件可在http://www.lfd.uci.edu/~gohlke/pythonlibs/中下载。whl文件可用pip安装。

Global site tag (gtag.js) - Google Analytics