目录
前言
在fme的数据流中,fme只能进行单进程7线程的计算,并不能有效的利用cpu的资源,在进行大批量数据计算的时候,原始的fme的单进程7线程就不能那么好的满足我们的需求了。
一、什么是线程和进程
可以简单粗暴的这么理解,一个进程可以控制多个线程,一个进程只能利用一个cpu核心。
二、使用步骤
1.引入库
导入线程池和进程池模块
from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor
2.写函数
我们以一个url的数据下载为例
首先在类的外部写入函数,为后面线程池调用做好准备
def download(road,url,x):
dd=os.path.exists(road)
if dd!=True:
with open(road,mode='wb') as f:
f.write(requests.get(url).content)
print(x)
在close函数中调用该方法,这里开启了50个线程
def close(self):
with ThreadPoolExecutor(50) as t:
for i in range(0,len(self.aa)):
t.submit(download,road=self.bb[i],url=self.aa[i],x=self.aa[i])
print('图片下载完毕')
pass
和传统HTTPCALLER对比
首先我们使用httpcaller来下载,处理完1274张图片,用了33.8秒
接下来我们使用多线程异步下载,可以看到只花费了21.6秒,提升了百分之30的速度。