python 线程
jopen
11年前
对比threading ,自己建立线程池。与python提供模块,multiprocessing.dummy, pool,map的运用
引入:Map
Map是个很酷的小功能,也是简化Python并发代码的关键。对那些不太熟悉Map的来说,它有点类似Lisp.它就是序列化的功能映射功能. e.g.
urls = [', '] results = map(urllib2.urlopen, urls)
这里调用urlopen方法,并把之前的调用结果全都返回并按顺序存储到一个集合中。这有点类似
results = [] for url in urls: results.append(urllib2.urlopen(url))
Map能够处理集合按顺序遍历,最终将调用产生的结果保存在一个简单的集合当中。
示例:
from multiprocessing.dummy import Pool ... pool = Pool() pool.map(funtion,funtion_para_list) pool.close() pool.join()
其中,
-
pool()带参数,如果不带,则默认使用系统的内核数,也可以自己加上内核数,比如4.
-
funtion,是一个处理函数 ,而处理的对象作为一个参数,传入该函数,如果对象有多个,可以先生成一个列。
-
使用pool.map()传入函数和参数队列。
-
返回的结果,也是以一个列进行保存。
使用上有限制,你要处理的对象(函数的参数)必须是已知的,存放于一个队列中。然后使用map来进行处理。pool的作用是把内核都使用起来。这里我认为使用默认的内核数比较好。与传统的thread比较,其优势在于,对于处理已知的对象,可以更快,而对于未知的对象(对象不确定,不能简单的生成一个队列来处理),还是使用传统的thread更加合适。