如何在fme中用pythoncaller开启线程\进程池,多线程异步操作要素
·
目录
前言
在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的速度。

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)