目录

前言

一、什么是线程和进程

二、使用步骤

1.引入库

2.写函数

和传统HTTPCALLER对比



前言

在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的速度。

 

Logo

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

更多推荐