#!python # -*- coding: utf-8 -*- """ Description: 生产者/消费者模式的模块 File: thread_worker.py Authors: kanpiaoxue Date: 2015年11月12日 下午5:51:08 """ from Queue import Queue import logging import threading import time import logsetting class TaskProtocol(object): """ 执行任务协议类 """ def execute(self): """ 执行任务 """ pass class ProduceTasksProtocol(object): """ 产出运行任务(TaskProtocol)的协议类 """ def getTasks(self): """ 产出运行的任务(TaskProtocol)列表 @return: 任务列表 """ pass class Producer(threading.Thread): """ 生产者消/费者模式:生产者类 """ def __init__(self, name, produceTasksProtocol, queue, sleepTime = 60): """ @param name: 线程名称 @param produceTasksProtocol: 生成 任务列表的协议类 @param queue: 运行队列 @param sleepTime: 生产者两次运行之间的间隔时间,单位:秒 """ threading.Thread.__init__(self, name = name) self.threadStop = False self.name = name self.produceTasksProtocol = produceTasksProtocol self.queue = queue self.sleepTime = int(sleepTime) def run(self): """ 线程运行方法 """ logging.info('thread %s start to work.' % self.name) while not self.threadStop: tasks = self.produceTasksProtocol.getTasks() size = str(len(tasks)) logging.info('produce %s tasks.' % size) for task in tasks: self.queue.put(task) logging.info('%s was put into queue.' % task) logging.info('%s will sleep %s.' % (self.name, self.sleepTime)) time.sleep(self.sleepTime) def stop(self): """ 停止线程运行 """ self.threadStop = True class Consumer(threading.Thread): """ 生产者消/费者模式:消费者类 """ def __init__(self, name, queue): """ @param name: 线程名称 @param queue: 运行队列 """ threading.Thread.__init__(self, name = name) self.threadStop = False self.name = name self.queue = queue def run(self): """ 线程运行方法 """ logging.info('thread %s start to work.' % (self.name)) while not self.threadStop: task = self.queue.get() logging.info('%s was take from queue and to work.' % task) start = time.clock() try: task.execute() except Exception as error: # 捕获异常,并记录错误日志。防止因为一个任务的失败造成线程退出工作 logging.error('when execute task, Occur some exception: %s' % error) end = time.clock() logging.info('%s finish working. It consumes %s seconds.' % (task,str((end - start)))) def stop(self): """ 停止线程运行 """ self.threadStop = True if __name__ == '__main__': logsetting.init_log("./log/ctapi") class TaskProtocol_01(TaskProtocol): """ 执行任务协议类 """ def __init__(self, num): TaskProtocol.__init__(self) self.num = num def execute(self): """ 执行任务 """ print self, 'start to work' def __str__(self): return 'task-' + str(self.num) class ProduceTasksProtocol_01(ProduceTasksProtocol): """ 产出运行任务(TaskProtocol)的协议类 """ def __init__(self, count): ProduceTasksProtocol.__init__(self) self.count = count def getTasks(self): """ 产出运行的任务(TaskProtocol)列表 @return: 任务列表 """ return [TaskProtocol_01(i) for i in xrange(count)] count = 100 produceTasksProtocol = ProduceTasksProtocol_01(count) queue = Queue() producer = Producer('producer', produceTasksProtocol, queue,sleepTime=5) producer.start() consumerCount = 5 for x in range(consumerCount) : consumer = Consumer('consumer-' + str(x), queue) consumer.start() threading.current_thread().join()
相关推荐
1. 什么是生产者消费者模式? 在线程世界里,生产者就是生产数据(或者说发布任务)的线程,消费者就是消费数据(或者说处理任务)的线程。在任务执行过程中,如果生产者处理速度很快,而消费者处理速度很慢,...
主要介绍了Python生成器实现简单"生产者消费者"模型代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
生产者消费者模型一般用于体现程序的多线程并发性,Python的多线程虽然受到GIL控制,但依然可以构建队列来简单体现出模型的思路,这里我们就来共同理解生产者消费者模型及在Python编程中的运用实例:
主要介绍了详解Python 模拟实现生产者消费者模式的实例的相关资料,这里使用了线程知识,队列知识及循环的知识,需要的朋友可以参考下
#生产者消费者模型 其实服务器集群就是这个模型 # 这里介绍的是非yield方法实现过程 import threading,time import queue q = queue.Queue(maxsize=10) def Producer(anme): # for i in range(10): # q.put('骨头%...
主要介绍了Python rabbitMQ如何实现生产消费者模式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
主要介绍了python条件变量之生产者与消费者操作,结合具体实例形式分析了Python条件变量的概念、原理、及线程操作的相关技巧,需要的朋友可以参考下
本文实例分析了Python自定义进程池。分享给大家供大家参考,具体如下: 代码说明一切: ...#消费者 class Consumer(Process): def __init__(self, queue, ioLock): super(Consumer, self).__init__() self.q
产品使用线程的生产者使用者模式的易于使用的实现安装pip install prodcon用法示例import randomimport timefrom queue import Queuefrom prodcon import Producer , Consumerdef generate_items ( start , end ): ...
回测器是使用消费者/生产者模式构建的,其中消费者是 Controller 类,生产者是 DataSource 类。交易算法包含在算法类中。 可以通过实例化 Portfolio 类并添加股票、价格和份额来创建自定义投资组合。这在 tests.py ...
python 实现的UDP通信,利用生产者消费者模式,通过线性安全队列实现多线程同步。如果要实现在不同电脑上通信,需要关闭防火墙。默认的是hostlocal(可以读程序)。基于python2.7。未打包exe。
这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本...
5.5.1 混合模式操作符 5.5.2 标准类型操作符 5.5.3 算术操作符 5.5.4 *位操作符(只适用于整型) 5.6 内建函数与工厂函数 5.6.1 标准类型函数 5.6.2 数字类型函数 5.6.3 仅...
Kafka-Keycloak演示该存储库包含Kafka的生产者和消费者演示。 它为Confluent Kafka使用Python模块,并使用Keycloak进行身份验证和授权。 Avro模式用于该主题,并且该模式已在模式注册表中注册。如何使用使用python -...
深入读了读python的官方文档,发觉Python自带的multiprocessing模块有很多预制的接口可以方便的实现多个主机之间的通讯,进而实现典型的生产者-消费者模式的分布式任务架构。 之前,为了在Python中实现生产者-消费者...
5.5.1 混合模式操作符 5.5.2 标准类型操作符 5.5.3 算术操作符 5.5.4 位操作符(只适用于整型) 5.6 内建函数与工厂函数 5.6.1 标准类型函数 5.6.2 数字类型函数 5.6.3 仅...
05 生产者消费者模型 06 第三次作业讲解 第20章 01 上节课回顾 02 装饰器基本理论 03 高阶函数使用 04 函数闭包 05 函数闭包装饰器基本实现 06 函数闭包加上返回值 07 函数闭包加上参数 08 函数闭包补充:解压序列...