首先是工作线程类
import threading
class TaskThread(threading.Thread):
def __init__(self):
super(TaskThread,self).__init__()
self.e = threading.Event()
self.setDaemon(True)
def run(self):
while True:
try:
self.task.doAction()
except Exception,e:
print e
finally:
self.e.clear()
self.e.wait()
def addTask(self,task):
self.task = task
然后是线程池类
import threading
from Queue import Queue
from TaskThread import TaskThread
class ThreadPool(object):
__instance = None
__lock = threading.Lock()
def __init__():
pass
def __call__(self):
self.run()
@classmethod
def getInstance(self):
self.__lock.acquire()
if not self.__instance:
self.__instance = super(ThreadPool,self).__new__(self)
self.__lock.release()
return self.__instance
def initPool(self,pool_max_size = 10,task_queue_size = 100):
self.pool = []
self.tasks = Queue(task_queue_size)
for i in range(pool_max_size):
self.pool.append(TaskThread())
def run(self):
while True:
th = None
for t in self.pool:
if not t.e.isSet():
th = t
break
if th is not None:
try:
task = self.tasks.get(0)
except:
pass
else:
th.addTask(task)
th.e.set()
if not th.isAlive():
th.start()
def addTask(self,task,timeout = 0):
try:
self.tasks.put(task,timeout)
return True
except:
return False
粗略的测试了下,没有发现什么问题,只是目前有几个问题比较纠结:
1、要不要把ThreadPool类写成单例,因为照现在写法,继承threading.Thread之后不能start,只能依靠另外起一条线程来执行run方法
2、工作线程类执行绑定方法的时候是直接调用约定方法还是用__call__
3、总觉得目前的设计怪怪的,想继续拆分几个类出来,但又有过度设计之嫌
明天开始研究gui了,初步选定wxPython,哈哈,理我完成"神器"的目标又进一步了...
分享到:
相关推荐
线程池是一种管理线程的机制,它预先创建一定数量的线程,当有任务需要执行时,线程池会分配一个空闲的线程去执行任务,而不是每次都创建新的线程。这种设计可以避免频繁创建和销毁线程带来的开销,提高系统的响应...
在C#编程中,线程池(ThreadPool)是一种高效的线程管理机制,它允许开发者创建并管理多个线程,而无需直接操作线程对象。线程池中的线程可以复用,减少了创建和销毁线程的开销。当我们需要执行大量短生命周期的任务...
线程池管理和多线程上传是并发编程中的一个重要实践,特别是在大数据传输和网络服务中。在Java等编程语言中,线程池通过有效地管理和复用线程资源,避免了频繁创建和销毁线程带来的开销,提升了系统性能。下面将详细...
Kotlin线程池(单线程池、固定线程池、缓存线程池,定时+周期任务线程池)的封装
在本项目中,“qt5多线程pingIP地址(线程池)”是一个利用Qt5框架和多线程技术来实现对多个IP地址进行并发ping操作的应用。这个应用可能会被网络管理员或者开发人员用来快速检测网络连通性,特别是在大规模网络环境...
此外,线程池的复杂性意味着在某些情况下,即使所有工作者线程都可用,也可能存在未完成的任务。因此,这种方法提供了一个基本的检查,但可能不是100%准确,具体使用时需根据实际需求进行调整。
在IT行业中,多线程和线程池是提高程序并发性能和资源管理的关键技术。尤其在Java编程领域,它们在大型系统和并发密集型应用中扮演着重要角色。本篇文章将详细探讨“常用多线程模板”以及“鱼刺类(Fork/Join框架)...
Qt是一个强大的跨平台应用程序开发框架,提供了丰富的API来支持多线程编程。本篇文章将深入讲解如何使用Qt的线程池实现多线程HTTP下载,并涵盖限速下载及进度显示的相关知识。 首先,我们要了解Qt中的线程池...
线程池是多线程编程中一个重要的概念,它能够优化系统资源的使用,提高系统的响应速度和效率。本篇文章将深入探讨C++中的线程池实现,并通过名为“OEasyPool-1.0”的示例来展示其工作原理。 线程池是预先创建并维护...
在IT领域,多线程是并发编程中的一个重要概念,它允许多个任务同时执行,以提高应用程序的效率和响应速度。线程池是一种线程管理机制,它预先创建了一组线程,当需要执行任务时,可以从池中获取空闲线程,而不是每次...
### 多线程的自动管理(线程池) #### 概述 在现代软件开发中,多线程技术被广泛应用于提高程序的并发处理能力和效率。然而,直接管理多个线程可能会导致资源浪费、线程间竞争等问题。为了解决这些问题,引入了...
总结,多线程和线程池在软件开发中起着关键作用,尤其是在高并发场景下。理解并合理使用线程池可以提高程序的性能和响应性,同时减少系统资源的消耗。在实际项目中,开发者应根据应用需求选择合适的线程池配置,以...
然而,在使用java线程池时,一个常见的问题是:使用完线程池后到底要不要关闭?本文将通过实例代码和详细解释,告诉大家使用完线程池后一定要关闭,否则可能会导致内存泄露和应用崩溃。 首先,让我们了解一下java...
- 线程池可以预先创建一定数量的线程,处理多个任务,避免了频繁创建和销毁线程的性能损耗。 - `ThreadPoolExecutor`的构造函数接受核心线程数、最大线程数、线程空闲时间、线程队列等参数,可以根据系统需求进行...
本讲义主要探讨了三个核心主题:Thread类、线程创建以及线程池。 1. **Thread类** Java中的`Thread`类是所有线程的基础,它是Java.lang.Thread的直接或间接子类。通过继承Thread类,我们可以覆盖它的`run()`方法来...
当调用 `QueueUserWorkItem` 时,如果线程池中有可用的工作线程,则立即将委托分配给一个线程;如果没有可用线程且当前线程数量未达到预设的最大值,则创建一个新的工作线程;如果达到最大值,则将委托加入到等待...
线程池维护着一组可重用的工作线程,当有新的任务提交时,线程池会从池中选择一个空闲线程来执行任务,而不是每次都创建新的线程。这样可以减少线程创建和销毁的开销,提高系统效率。线程池的大小可以根据系统资源和...
在这个"线程池c++"的实现中,我们将探讨如何创建和管理一个线程池,以及如何根据需求动态调整线程数量。 首先,我们需要理解线程池的基本结构。线程池通常包含以下几个核心组件: 1. **工作队列**:这是一个任务...
Java线程、线程池和XML解析是Java编程中至关重要的三个概念,它们在实际开发中扮演着不可或缺的角色。下面将分别对这三个主题进行深入的介绍。 首先,我们来看Java线程。线程是程序执行的最小单位,一个进程可以...