python并行化介绍及使用 Pool
2015-08-25 13:58
856 查看
本篇将要介绍python的并行化,及简单的应用。
主要介绍map函数的使用,一手包办了序列操作、参数传递和结果保存等一系列的操作。
首先是引入库:
from multiprocessing.dummy import Pool
pool=Pool(4)
results=pool.map(爬取函数,网址列表)
本文将一个简单的例子来看一下如何使用map函数以及这种方法与普通方法的对比情况。
对比以上两种方法,可以很明显地看出 测试二比测试一要快很多。
对程序做一下解释:
测试一种
for i in urls:
getsource(i) #使程序一直遍历urls列表中的网址,然后循环调用getsource函数
测试二中:
pool=Pool(4) #声明了4个线程数量,这里的个数根据你电脑的CPU个数来定。
results=pool.map(getsource,urls) #这里使用map函数,并且函数的参数为自定义函数名称,以及函数中的参数(这里为一个列表)
pool.close() #关闭pool对象
pool.join() #join函数的主要作用是等待所有的线程(4个)都执行结束后
print (time.time()-time1) #输出所用时间差
列举Pool的其他应用函数:
主要介绍map函数的使用,一手包办了序列操作、参数传递和结果保存等一系列的操作。
首先是引入库:
from multiprocessing.dummy import Pool
pool=Pool(4)
results=pool.map(爬取函数,网址列表)
本文将一个简单的例子来看一下如何使用map函数以及这种方法与普通方法的对比情况。
import time from multiprocessing.dummy import Pool def getsource(url): html=requests.get(url) urls=[] for i in range(1,21): newpage='http://tieba.baidu.com/p/3522395718?pn='+str(i) urls.append(newpage) timex=time.time() #测试一 for i in urls: getsource(i) print (time.time()-timex) #这里是输出的结果: #10.2820000648 time1=time.time() #测试二 pool=Pool(4) results=pool.map(getsource,urls) pool.close() pool.join() print (time.time()-time1) #这里是输出结果: #3.23600006104
对比以上两种方法,可以很明显地看出 测试二比测试一要快很多。
对程序做一下解释:
测试一种
for i in urls:
getsource(i) #使程序一直遍历urls列表中的网址,然后循环调用getsource函数
测试二中:
pool=Pool(4) #声明了4个线程数量,这里的个数根据你电脑的CPU个数来定。
results=pool.map(getsource,urls) #这里使用map函数,并且函数的参数为自定义函数名称,以及函数中的参数(这里为一个列表)
pool.close() #关闭pool对象
pool.join() #join函数的主要作用是等待所有的线程(4个)都执行结束后
print (time.time()-time1) #输出所用时间差
列举Pool的其他应用函数:
from multiprocessing import Pool def f(x): #定义一个自定义函数f return x*x if __name__ == '__main__': pool = Pool(processes=4) # start 4 worker processes result = pool.apply_async(f, (10,)) # 评估"f(10)" asynchronously print result.get(timeout=1) #限定反应时间为1 通过get函数取得result的结果 print pool.map(f, range(10)) # prints "[0, 1, 4,..., 81]" it = pool.imap(f, range(10)) #使用imap函数执行自定义函数 print it.next() # prints "0" 使用next函数一个一个地取得it的执行结果 print it.next() # prints "1" print it.next(timeout=1) # prints "4" unless your computer is *very* slow import time result = pool.apply_async(time.sleep, (10,)) print result.get(timeout=1) # raises TimeoutError
相关文章推荐
- python菜鸟日记8
- 超算上安装python+HTSeq+numpy+easy_install
- 使用Python实现Hadoop MapReduce程序
- pythonXXX云所有厂商
- python find file
- (转)python 计算代码行数以及相关知识点
- Python并发编程
- 【Python】[进程和线程]多进程,多线程,ThreadLocal,进程VS.线程,分布式进程
- Python中time和datetime模块对时间的操作
- Python 中 datetime时间模块学习
- Python 获取文件信息
- python类实例方法,类方法,类静态方法
- 使用Python的Bottle框架写一个简单的服务接口的示例
- 6.python 分支与循环
- python偏函数
- 学习的知识点记录
- python函数式编程内建函数filter,map,reduce函数
- Python 命令行解析工具 Argparse介绍
- gevent 写的bench URL 的小工具
- 【转】使用virtualenv在ubuntu上搭建python 3开发环境