如何在fme中用pythoncaller开启线程\进程池,多线程异步操作要素

目录

前言

一、什么是线程和进程

二、使用步骤

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

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力的悟空

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值