散仙使用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,支持版本:python3.4,3.5,3.6
Python 3.4是Python编程语言的一个重要版本,发布于2015年,它引入了许多新特性并改进了已有的功能。Pywin32是一个Python扩展模块集合,专为在Windows平台上操作Windows API和COM(组件对象模型)设计。在Python 3.4...
Python3.4是Python编程语言的一个重要版本,发布于2014年,它在Python3系列中引入了一些新...了解这些知识点后,无论是初学者还是经验丰富的开发者,都能更好地利用这个压缩包来学习、开发或维护基于Python3.4的项目。
在语法层面,Python 3.4 引入了 `with` 语句的上下文管理协议的增强,允许自定义类实现 `__enter__` 和 `__exit__` 方法,以便更好地控制资源的获取和释放。这使得编写更安全的文件操作或其他资源管理变得容易。 ...
这个版本的文档是学习Python3.4的基础资源,特别是对于初学者来说,它包含了详尽的教程和说明,能够帮助他们系统地掌握这门语言。 1. **基础语法**:Python3.4的中文手册会介绍基本的编程概念,如变量、数据类型...
numpy for python3.4
《OpenCV-Python3.4.1.15:手把手教你解决安装难题》 OpenCV,全称Open Source Computer Vision Library,是一个开源的计算机视觉库,它包含了众多图像处理和计算机视觉的算法,广泛应用于图像分析、机器学习以及...
python.exe PYTHON3.4
总的来说,《Python3.4官方教程》是学习和进阶Python3.4不可或缺的资料,无论是初学者还是经验丰富的开发者,都能从中受益匪浅。通过阅读和实践,读者可以熟练掌握Python3.4的核心知识,为构建复杂的应用程序打下...
Python是一门简单易学,功能强大的编程语言。它具有高效的高级数据结构和简单而有效的面向对象...此外,用户必须要确定正在使用的是3.4版本,因为小编带来的是python3.4中文手册,专门针对使用该版本的用户进行学习的!
这些依赖包在你提到的压缩包“python3.4matplotlib绘图包(X64)”中应该已经包含。 首先,我们来看`matplotlib`。这是Python最广泛使用的数据可视化库之一,它的设计灵感来源于MATLAB。matplotlib提供了一个命令式...
多线程实现生产者消费者模型:锁(Lock)、信号量(Semaphore、BoundedSemaphore)、条件(Condition)、队列(Queue)、事件(Event) 多进程程实现生产者消费者模型:信号量(Semaphore)、条件(Condition)、...
python3.4配套的twisted,安装scrapy需要安装twisted,此版本对应python3.4
然而,有时候用户可能会遇到卸载问题,如标题所述,“python3.4.16490.1437702276.msi”可能无法正常卸载。这可能是由于多种原因,如安装程序损坏、注册表项未正确清理、与其他程序冲突或系统权限不足等。为了解决这...
python3.4爬取网络图片,然后写入文件的示例小程序
Python3.4打包成exe文件是一项常见的需求,它允许开发者将Python程序转化为可以在没有Python环境的Windows系统上运行的独立可执行程序。这通常通过使用第三方工具如PyInstaller、cx_Freeze或Py2exe实现。下面我们将...
总之,Python 3.4 是一个稳定且功能丰富的版本,适合初学者和专业开发者。通过理解其特性并正确安装,你将能够继续你的编程旅程。如果在降级过程中遇到任何问题,记得查阅官方文档或在线社区获取帮助。
opencv-python 3.4.3.18
Python拥有一个强大的标准库。Python语言的核心只包含数字、字符串、列表、字典、文件等常见类型和函数,而由Python标准库提供了系统管理、网络通信、文本处理、数据库接口、图形系统、XML处理等额外的功能。Python...
Python 3.4 绿化版是一款轻量级的、便携式的 Python 开发环境,专为便于携带和快速使用而设计。绿化版通常指的是软件已经进行了一定程度的优化和封装,使得它无需安装即可在任何支持的系统上运行,减少了依赖性和...