首先是工作线程类
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,哈哈,理我完成"神器"的目标又进一步了...
分享到:
相关推荐
源码演示了多线程写法,主要是对比精易模块线程池,鱼刺模块线程池。@在人间。
线程、多线程和线程池面试专题.线程、多线程和线程池面试专题.线程、多线程和线程池面试专题.线程、多线程和线程池面试专题.
java多线程,对多线程,线程池进行封装,方便使用
c#多线程以及线程池的学习 c#多线程以及线程池的学习 c#多线程以及线程池的学习
使用线程池管理多线程上传,包含了文件拆分,文件分片多线程上传,单文件上传。多线程执行任务等待管理。拒绝直接new Thread创建新线程导致的诸多问题
C#线程池 所有线程运行完毕,只是测试代码,用来弄清楚,打印信息很明确,适合初学者
多线程经典简洁例子(线程池)
线程、多线程和线程池面试专题
1.委托与多线程2.线程池 Socket 3.聊天程序 模拟IIS 4.一般处理程序 11.异步无刷新分页复习+服务器端控件
C#判断线程池中所有的线程是否已经完成.doc
多线程性能优化代码 + 线程池
这是对线程组和线程池解释,个人参考一些文章后根据个人理解做的小总结。
单线程,多线程,线程池程序设计扫描网络IP
26_多线程_第1天(Thread、线程创建、线程池)_讲义
一个带有UI界面的、简单的、线程池的使用,主要应该于多个线程的管理与同步,以及对多个任务队列的操作
创建多线程操作是非常昂贵的,如果每个运行时间非常短的操作,都创建多线程进行操作,可能并不能提高效率,反而降低了效率。 如果你有非常多的执行时间非常短的操作,那么适合作用线程池来提高效率,而不是自行创建...
@1157374899。Tags:多线程线程池。
通过线程池来管理多线程,这篇文章会对你有帮助