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

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() 实际上意味着等到队列为空,再执行别的操作





分享到:
评论

相关推荐

    Python库 | mpf-0.53.0.dev53-cp34-none-any.whl

    《Python库mpf-0.53.0.dev53-...通过whl格式的包分发,mpf的安装变得简单,无论是在Python 3.4环境下还是其他支持的环境中,都能轻松实现。对于Python爱好者和游戏开发者而言,mpf无疑是一个值得探索和利用的宝贵资源。

    python中利用队列asyncio.Queue进行通讯详解

    这段代码演示了如何使用`asyncio.Queue`进行生产者消费者模式的通信。下面我们来逐步解析其中的关键部分: ##### 生产者函数producer 这个函数负责向队列中添加任务。这里采用了一个简单的计数器来模拟任务的生成...

    Python中asyncio与aiohttp入门教程

    在Python中,异步编程的核心库是asyncio,它从Python 3.4版本开始集成到标准库中。asyncio特别适用于网络和IO密集型任务,例如在服务器端的Web应用中,可以使用单线程来处理多用户的并发请求。 在使用asyncio时,...

    人事管理系统设计与实现13000字【论文】.docx

    ### 人事管理系统设计与实现 #### 一、课题背景与国内外发展现状 ##### 1.1 课题背景 随着互联网和计算机技术的迅速发展,现代企业逐渐转向信息化、数字化和无纸化的管理模式。这一趋势催生了一系列决策支持系统...

    django_v1.8.pdf

    - **版本支持**: Django v1.8 支持 Python 2.7 和 Python 3.4。 - **迁移指南**: 提供了从 Python 2.x 迁移到 Python 3.x 的指南。 **1.13 地理框架** - **GeoDjango**: 是 Django 的一个扩展,用于地理空间 Web ...

    Building APIs with Django and Django Rest Framework

    - 生产环境中推荐使用更强大的数据库系统如PostgreSQL。 ##### 2.3 创建模型 - 使用`models.py`定义应用程序的数据模型。 - 例如,可以创建一个`Poll`模型来存储投票数据。 - 模型字段应反映实际业务需求。 ##### ...

    人员考勤考核系统建设方案

    该系统适用于各种规模的企业和组织,帮助管理者更好地了解员工的工作状态,从而实现更有效的管理和激励。 ##### 1.3 方法与步骤 1. **需求分析**:深入了解企业的具体需求,明确系统的功能和性能要求。 2. **系统...

    2023年华数杯不透明制品最优配色方案设计B题全文

    传统的手工配色方式不仅主观性强,而且效率低下,难以满足现代工业生产和消费者对于颜色多样性和准确性的需求。为此,《2023年华数杯全国大学生数学建模大赛》的大数据B题论文《不透明制品最优配色方案设计》提出了...

Global site tag (gtag.js) - Google Analytics