学完线程,摸索着写了个线程池,有待完善

首先是工作线程类


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、总觉得目前的设计怪怪的,想继续拆分几个类出来,但又有过度设计之嫌 8)

明天开始研究gui了,初步选定wxPython,哈哈,理我完成"神器"的目标又进一步了...
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值