为了学习Python,最好还是直接从写代码入手,解决的问题如下:
1、设计三个线程,线程1每秒钟对一个值进行+1操作,线程2每秒钟对该值进行+3操作,线程3每秒钟对该值进行-2操作
涉及知识点:线程,锁,time标准库
代码如下:
#coding=utf-8 ''' Created on 2015年8月19日 设计三个线程,线程1每秒钟对一个值进行+1操作,线程2每秒钟对该值进行+3操作,线程3每秒钟对该值进行-2操作 @author: minmin ''' import time import thread def loop(name, value, nsleep, action, lock1, lock2): while True: lock1.acquire() value[0] += action action_str = "" if action >= 0: action_str = "+" + str(action) else: action_str = str(action) print name + "对value做了" + action_str + "操作, value = " + str(value[0]) lock1.release() time.sleep(nsleep) lock2.release() def main(): lock = thread.allocate_lock() lock1 = thread.allocate_lock() lock2 = thread.allocate_lock() lock3 = thread.allocate_lock() value = [10] lock1.acquire() lock2.acquire() lock3.acquire() locks = [lock1, lock2, lock3] thread.start_new_thread(loop, ("Producer1", value, 1, 1, lock, lock1)) thread.start_new_thread(loop, ("Producer2", value, 1, 3, lock, lock2)) thread.start_new_thread(loop, ("Customer1", value, 1, -2, lock, lock3)) #防止主线程执行完自动关闭运行的三个线程 for i in locks: while i.locked(): pass if __name__ == '__main__': main()
运行结果如下图:
2、设计三个线程,两个生产者一个消费者:一个生产者每秒钟生产1一个产品放入产品池,一个生产者每秒钟生产2个产品放入产品池,一个消费者每秒钟从产品池中消费1-5之间的一个随机数个产品。产品池满时,生产者等待,产品池有空位时,生产者继续生产;产品池空时,消费者等待,产品池有产品时,消费者继续消费。每个产品有自己独特的标记。
涉及知识点:多线程、锁、threading、生产者-消费者、阻塞队列。
这里先实现一个线程的子模块myThread,方便调用函数。
代码如下:
#coding=utf-8 ''' Created on 2015年8月23日 @author: minmin ''' import threading import time class MyThread(threading.Thread): def __init__(self, func, args, name = ''): threading.Thread.__init__(self) self.func = func self.args = args self.name = name def getResult(self): return self.res def run(self): print 'starting %s at:%s' % (self.name, time.strftime('%Y-%m-%d %H:%M:%S')) self.res = apply(self.func, self.args) print '%s finished at:%s' % (self.name, time.strftime('%Y-%m-%d %H:%M:%S'))
生产者-消费者代码如下:
#coding=utf-8 ''' Created on 2015年8月23日 @author: minmin ''' import random import time import myThread import Queue import threading ''' 生产者,每nsleep秒生产nprod个产品,放入queue中 a 产品标记 name 生产者的名字 ''' def producer(queue, nsleep, nprod, name, a, lock): while True: for i in range(nprod): lock.acquire() queue.put(a[0], 1) print '%s生产了一个产品:%d, 当前队列大小:%d' % (name, a[0], queue.qsize()) a[0] += 1 lock.release() time.sleep(nsleep) ''' 消费着,每nsleep秒从queue中消费minProd至maxProd间随机产生的一个值的产品 name 消费者的名字 ''' def consumer(queue, nsleep, minProd, maxProd, name): while True: nprod = random.randint(minProd, maxProd) for i in range(nprod): val = queue.get(1) print '%s消费了一个产品:%d, 当前队列大小:%d' % (name, val, queue.qsize()) time.sleep(nsleep) def main(): queue = Queue.Queue(10) a = [0] lock = threading.Lock() producer1 = myThread.MyThread(producer, (queue, 1, 1, 'producer1', a, lock), 'producer1') producer2 = myThread.MyThread(producer, (queue, 1, 2, 'producer2', a, lock), 'producer2') consumer1 = myThread.MyThread(consumer, (queue, 1, 1, 5, 'consumer1'), 'consumer1') threads = [producer1, producer2, consumer1] for i in threads: i.start() for i in threads: i.join() if __name__ == '__main__': main()
运行结果如下:
代码我也放到GitHub上面了
相关推荐
设计了生产者-消费者模拟演示系统。生产者模拟多个进程生产指令放入指令队列中,消费者模拟处理机从指令队列中取出指令并映射为页进行处理,实现页面置换算法。利用Qt产生动画,模拟演示这一过程更加生动形象,可以...
主要介绍了python之生产者消费者模型实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
采用python3完成的生产者消费者问题,涉及到多线程、多线程队列,有需要的小伙伴们可以看看哎~ 欢迎交流学习~
我们将使用Python线程来解决Python中的生产者—消费者问题。这个问题完全不像他们在学校中说的那么难。 如果你对生产者—消费者问题有了解,看这篇博客会更有意义。 为什么要关心生产者—消费者问题: 可以帮你更好...
主要介绍了python多进程下的生产者和消费者模型,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
主要介绍了Python semaphore evevt生产者消费者模型原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
主要介绍了Python rabbitMQ如何实现生产消费者模式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
主要介绍了Python生成器实现简单"生产者消费者"模型代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
= v0.8、Confluent Cloud 和 Confluent 平台兼容的高级生产者、消费者和 AdminClient。 客户端是: 可靠的 - 它是 librdkafka 的包装器(通过二进制轮自动提供),广泛部署在各种生产场景中。 它使用与 Java ...
本篇会给出如何使用python来读写kafka, 包含生产者和消费者. 以下使用kafka-python客户端 生产者 爬虫大多时候作为消息的发送端, 在消息发出去后最好能记录消息被发送到了哪个分区, offset是多少, 这些记录在很多...
该体系结构是异步生产者-消费者模型的变体,也可以描述为具有多个主题的分布式发布者-订阅者,其中从同级下载的每个作品都作为主题添加到相应的文件编写器队列中,而文件编写者协程是该主题的订阅者文件编写器队列...
05 生产者消费者模型 06 第三次作业讲解 第20章 01 上节课回顾 02 装饰器基本理论 03 高阶函数使用 04 函数闭包 05 函数闭包装饰器基本实现 06 函数闭包加上返回值 07 函数闭包加上参数 08 函数闭包补充:解压序列...
这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本...
单的生产者消费者模型,从而提高了系统的识别效率,另外,对人脸的识别模块还 使用了 Python,C++混合编程技术引入了 Google 的开源深度学习框架 Tensorflow作 为对 FaceNet的具体实现,数据库使用的是 SQL Server...
架构涉及主要采用了 生产者消费者的涉及模式,使用Redis作为消息队列进行解耦操作。 主要架构涉及如下: 接下来开始介绍一下程序的实现过程,主要讲解wxpy -> python.redis -> Java.redis 1、Wxpy初体验 项目使用...
4. 生产者消费者模型 实验三 Python 数据分析 【实验内容】 利用机器学习算法构建模型,根据鸢尾花的花萼和花瓣大小,区分鸢尾花的品种。实现一个基础的三分类问题。 实验四 大数据可视化工具 ECharts 【实验内容】...
特征使用平衡组的消费者消费者使用自定义主题分区和偏移量制片人该图书馆是作为一个学习Cython的项目而诞生的,并且在最近几年一直没有得到积极维护,因此应谨慎使用。例子简单的消费者如何使用消费者: consumer = ...
从头至尾阅读了Caffe全部源码,过程中写了这个笔记,写的比较粗糙,但是包含了Caffe中所有重要部分源码的解析(除python接口、具体Layer层和tools),包括多线程训练部分和datalayer的lmdb数据读取(生产者消费者)...
就是一个先进先出的数据结构,而Python的标准库中提供了一个线程安全的队列,也就是说该模块是适用于多线程编程的先进先出(first-in,first-out,FIFO)数据结构,可以用来在生产者消费者线程之间安全地传递消息或...
按数据生产者-消费者顺序排列的多个任务将创建工作流。 Flyte工作流程是纯规范的,可以使用任何语言创建。 每个任务也可以用任何语言。 我们确实提供了对python的一流支持,使其非常适合现代机器学习和数据处理...