前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >左手用R右手Python系列——使用多进程进行任务处理

左手用R右手Python系列——使用多进程进行任务处理

作者头像
企鹅号小编
发布2018-02-26 14:57:56
5340
发布2018-02-26 14:57:56
举报
文章被收录于专栏:编程编程

数据抓取中的密集任务处理,往往会涉及到性能瓶颈,这时候如果能有多进程的工具来进行支持,那么往往效率会提升很多。

今天这一篇分享在R语言、Python中使用调用多进程功能进行二进制文件下载。

导入待下载的文件:

在R语言中,文件下载的思路一般有三种可选方案:

方案1——构建显示循环:

一共10个PDF文件,下载过程未设置等待时间,平均4.5m,一共44.5m,总耗时100m。

方案2——使用plyr包中的向量化函数

有点惨,同样的10个pdf文档,耗时机会没啥变化,这一次是99.89,比上一次99.91只节省了0.02m,不过我使用的校园网(网速特别烂的那种,感兴趣可以在宽带性能比较高的条件下再测试一下)

方案3——使用多进程包进行并发处理:

这里使用的多进程包是foreach包,你也可以尝试使用Parallel包来处理。

这次一共使用了……99.46,好吧,我可能用的假的多进程,不过总之总耗时少了不是嘛,从99.91到98.72,还是节省了将近1.19秒。

而且代码看起来又优雅了不少(好吧我编不下去了~_~)

对于R语言的多进程目前我还了解的不多,如果以后有新的理解会从新梳理这一块,感兴趣的也可以自行探索foreach这个包的内部多进程执行机制。

Python:

方案1——使用显式声明的循环进行下载:

居然比R语言的循环慢了三秒钟,接下来尝试使用多进程/多线程来尝试下载这些PDF文档。

方案2——使用threading包提供的多线程方式进行下载:

方案3——使用multiprocessing包提供的多进程功能

当使用multiprocessing包的进程池功能时,我的代码运行出现锁死挂起的状态,就是没有输出也不退出,甚至不能强制中断,查了一下是Windows平台对于forks机制的特殊问题,算是个坑吧。

我自己对于多进程理解的极其肤浅,这里先占个坑,等我理解深入了,找到好的解决方案来回来填~-~

本文来自企鹅号 - 数据小魔方媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文来自企鹅号 - 数据小魔方媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档