您的位置:首页 > 编程语言 > Python开发

python threadpool

2015-05-20 19:02 357 查看

线程池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)

创建一个工作请求。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python