线程池threadpool
threadpool可以控制线程的数量。
一个简单的例子
#coding=utf8
import threadpool
import time,random
def hello(str):
time.sleep(2)
return str
def print_result(requests,result):
print "the result is %s %r"%(requests.requestID,result)
data=[i for i in range(24)]
print data
poolsize=5
pool=threadpool.ThreadPool(poolsize)
requests=threadpool.makeRequests(hello,data,print_result)
[pool.putRequest(req) for req in requests]
pool.wait()
具体使用应该看借口文档
makeRequests(callable,args_list,callback=None,exc_callback=None)
创建多个计算请求,并允许有不同的参数。
参数列表中的每一个元素是两个元素的元组,分别是位置参数列表和关键字参数字典。
class ThreadPool
线程池类,发布工作请求并收集结果。
__init__(self,num_workers,q_size)
构造函数,设置线程池工作线程数量和最大任务队列长度。 num_workers 是初始化时的线程数量。如果 q_size>0 则会限制工作队列的长度,并且在工作队列满时阻塞继续插入工作请求的任务。
createWorkers(self,num_workers)
增加工作线程数量。
dismissWorkers(self,num_workers)
减少工作线程数量。
pool(self,block)
处理队列中的新结果。也就是循环的调用各个线程结果中的回调和错误回调。不过,当请求队列为空时会抛出 NoResultPending 异常,以表示所有的结果都处理完了。这个特点对于依赖线程执行结果继续加入请求队列的方式不太适合。
putRequest(self,request,block=True,timeout=0)
加入一个任务请求到工作队列。
wait(self)
等待执行结果,直到所有任务完成。
class WorkerThread
工作者线程,供ThreadPool内部使用,不必关注。其自定义方法也只有一个。
class WorkRequest
任务请求类。
__init__(self,callable,args=None,kwds=None,requestID=None,callback=None,exc_callback=None)
创建一个工作请求。