申请专栏作者
投稿发布
您的当前位置:主页 > yabo亚博体育下载 > 正文

三行Python代码,可以让你的yabo88滚球处理快别人4倍

来源: 时间:2019-07-23
请点击下面的广告后浏览!

Python是一门非常适合处理yabo88滚球和自动化完成重复性工作的编程语言,我们在用yabo88滚球训练机器学习模型之前,通常都需要对yabo88滚球进行预处理,而Python就非常适合完成这项工作,比如需要重新调整几十万张图像的尺寸,用Python没问题! 本文来自可思yabo88滚球(sykv.com),转载请联系本站及注明出处

你几乎总是能找到一款可以轻松完成yabo88滚球处理工作的Python库。 可思yabo88滚球sykv.com

然而 内容来自可思yabo88滚球sykv.com

虽然Python易于学习,使用方便,但它并非运行速度最快的语言。

可思yabo88滚球-yabo88滚球挖掘,智慧医疗,机器视觉,机器人sykv.com

默认情况下,Python程序使用一个CPU以单个进程运行。 可思yabo88滚球sykv.com,sykv.cn

不过如果你是在最近几年配置的电脑,通常都是四核处理器,也就是有4个CPU。

本文来自可思yabo88滚球(sykv.com),转载请联系本站及注明出处

这就意味着在你苦苦等待Python脚本完成yabo88滚球处理工作时

可思yabo88滚球sykv.com,sykv.cn

你的电脑其实有75%甚至更多的计算资源就在那闲着没事干! 可思yabo88滚球-AI,sykv.com人工智能,深度学习,机器学习,神经网络

今天就教大家怎样通过并行运行Python函数,充分利用你的电脑的全部处理能力。 可思yabo88滚球-www.sykv.cn,sykv.com

得益于Python的 concurrent.futures 模块,

可思yabo88滚球sykv.com,sykv.cn

我们只需3行代码 可思yabo88滚球sykv.com,sykv.cn

就能将一个普通yabo88滚球处理脚本变为能并行处理yabo88滚球的脚本,提速4倍。

可思yabo88滚球sykv.com,sykv.cn

普通Python处理yabo88滚球方法 可思yabo88滚球-人工智能资讯平台sykv.com

比方说:

可思yabo88滚球-yabo88滚球挖掘,智慧医疗,机器视觉,机器人sykv.com

我们有一个全是图像yabo88滚球的文件夹,想用Python为每张图像创建缩略图。

内容来自可思yabo88滚球sykv.com

下面是一个短暂的脚本: 可思yabo88滚球sykv.com

用Python的内置glob函数获取文件夹中所有JPEG图像的列表,

可思yabo88滚球-人工智能资讯平台sykv.com

然后用Pillow图像处理库为每张图像保存大小为128像素的缩略图: 本文来自可思yabo88滚球(sykv.com),转载请联系本站及注明出处

? 可思yabo88滚球-AI,sykv.com人工智能,深度学习,机器学习,神经网络

?

内容来自可思yabo88滚球sykv.com

这段脚本沿用了一个简单的模式

可思yabo88滚球-AI,sykv.com智能驾驶,人脸识别,区块链,大yabo88滚球

你会在yabo88滚球处理脚本中经常见到这种方法: 可思yabo88滚球-yabo88滚球挖掘,智慧医疗,机器视觉,机器人sykv.com

首先获得你想处理的文件(或其它yabo88滚球)的列表
写一个辅助函数,能够处理上述文件的单个yabo88滚球
使用for循环调用辅助函数,处理每一个单个yabo88滚球,一次一个。

可思yabo88滚球sykv.com,sykv.cn

咱们用一个包含1000张JPEG图像的文件夹测试一下这段脚本,

内容来自可思yabo88滚球sykv.com

看看运行完要花多长时间:

内容来自可思yabo88滚球sykv.com

?

可思yabo88滚球sykv.com,sykv.cn

? 可思yabo88滚球-AI,sykv.com智能驾驶,人脸识别,区块链,大yabo88滚球

运行程序花了8.9秒,但是电脑的真实工作强度怎样呢?

可思yabo88滚球-人工智能资讯平台sykv.com

我们再运行一遍程序 可思yabo88滚球-AI,sykv.com人工智能,深度学习,机器学习,神经网络

看看程序运行时的活动监视器情况: 可思yabo88滚球-AI,sykv.com智能驾驶,人脸识别,区块链,大yabo88滚球

?

可思yabo88滚球-www.sykv.cn,sykv.com

?

可思yabo88滚球-www.sykv.cn,sykv.com

电脑有75%的处理资源处于闲置状态!这是什么情况? 可思yabo88滚球-www.sykv.cn,sykv.com

这个问题的原因就是我的电脑有4个CPU,但Python只使用了一个。 可思yabo88滚球sykv.com

所以程序只是卯足了劲用其中一个CPU,另外3个却无所事事。 可思yabo88滚球-yabo88滚球挖掘,智慧医疗,机器视觉,机器人sykv.com

因此我需要一种方法能将工作量分成4个我能并行处理的单独部分。 内容来自可思yabo88滚球sykv.com

幸运的是,Python中有个方法很容易能让我们做到!

可思yabo88滚球-AI,sykv.com人工智能,深度学习,机器学习,神经网络

试试创建多进程 可思yabo88滚球-人工智能资讯平台sykv.com

下面是一种可以让我们并行处理yabo88滚球的方法:

本文来自可思yabo88滚球(sykv.com),转载请联系本站及注明出处

将JPEG文件划分为4小块。运行Python解释器的4个单独实例。
让每个Python实例处理这4块yabo88滚球中的一块。
将这4部分的处理结果合并,获得结果的最终列表。 可思yabo88滚球-yabo88滚球挖掘,智慧医疗,机器视觉,机器人sykv.com

4个Python拷贝程序在4个单独的CPU上运行, 可思yabo88滚球-www.sykv.cn,sykv.com

处理的工作量应该能比一个CPU大约高出4倍, 可思yabo88滚球-人工智能资讯平台sykv.com

对吧?

可思yabo88滚球-yabo88滚球挖掘,智慧医疗,机器视觉,机器人sykv.com

最妙的是,Python已经替我们做完了最麻烦的那部分工作。 可思yabo88滚球-AI,sykv.com人工智能,深度学习,机器学习,神经网络

我们只需告诉它想运行哪个函数以及使用多少实例就行了,剩下的工作它会完成。 可思yabo88滚球-www.sykv.cn,sykv.com

整个过程我们只需要改动3行代码。 可思yabo88滚球sykv.com,sykv.cn

首先 可思yabo88滚球-AI,sykv.com人工智能,深度学习,机器学习,神经网络

我们需要导入concurrent.futures库

本文来自可思yabo88滚球(sykv.com),转载请联系本站及注明出处

这个库就内置在Python中:

可思yabo88滚球-人工智能资讯平台sykv.com

?

可思yabo88滚球sykv.com

? 可思yabo88滚球-AI,sykv.com智能驾驶,人脸识别,区块链,大yabo88滚球

接着,我们需要告诉Python启动4个额外的Python实例。 可思yabo88滚球-AI,sykv.com人工智能,深度学习,机器学习,神经网络

我们通过让Python创建一个Process Pool来完成这一步:

可思yabo88滚球-人工智能资讯平台sykv.com

? 可思yabo88滚球sykv.com,sykv.cn

?

可思yabo88滚球-人工智能资讯平台sykv.com

默认情况下:

本文来自可思yabo88滚球(sykv.com),转载请联系本站及注明出处

它会为你电脑上的每个CPU创建一个Python进程,

可思yabo88滚球sykv.com,sykv.cn

所以如果你有4个CPU,就会启动4个Python进程。 可思yabo88滚球sykv.com

最后一步: 可思yabo88滚球-AI,sykv.com智能驾驶,人脸识别,区块链,大yabo88滚球

让创建的Process Pool用这4个进程在yabo88滚球列表上执行我们的辅助函数。 可思yabo88滚球-www.sykv.cn,sykv.com

完成这一步,我们要将已有的for循环: 内容来自可思yabo88滚球sykv.com

? 可思yabo88滚球sykv.com

?

可思yabo88滚球sykv.com,sykv.cn

替换为新的调用executor.map(): 可思yabo88滚球sykv.com,sykv.cn

? 可思yabo88滚球-yabo88滚球挖掘,智慧医疗,机器视觉,机器人sykv.com

? 本文来自可思yabo88滚球(sykv.com),转载请联系本站及注明出处

该executor.map()函数调用时需要输入辅助函数和待处理的yabo88滚球列表。 可思yabo88滚球-AI,sykv.com人工智能,深度学习,机器学习,神经网络

这个函数能帮我完成所有麻烦的工作 可思yabo88滚球-AI,sykv.com智能驾驶,人脸识别,区块链,大yabo88滚球

包括将列表分为多个子列表、将子列表发送到每个子进程、运行子进程以及合并结果等。

可思yabo88滚球-AI,sykv.com智能驾驶,人脸识别,区块链,大yabo88滚球

干得漂亮!

可思yabo88滚球-AI,sykv.com人工智能,深度学习,机器学习,神经网络

这也能为我们返回每个函数调用的结果。

可思yabo88滚球sykv.com,sykv.cn

Executor.map()函数会按照和输入yabo88滚球相同的顺序返回结果。 可思yabo88滚球-人工智能资讯平台sykv.com

所以我用了Python的zip()函数作为捷径,一步获取原始文件名和每一步中的匹配结果。 可思yabo88滚球-yabo88滚球挖掘,智慧医疗,机器视觉,机器人sykv.com

这里是经过这三步改动后的程序代码: 本文来自可思yabo88滚球(sykv.com),转载请联系本站及注明出处

? 本文来自可思yabo88滚球(sykv.com),转载请联系本站及注明出处

?

可思yabo88滚球sykv.com

我们来运行一下这段脚本

可思yabo88滚球-AI,sykv.com智能驾驶,人脸识别,区块链,大yabo88滚球

看看它是否以更快的速度完成yabo88滚球处理: 可思yabo88滚球-AI,sykv.com人工智能,深度学习,机器学习,神经网络

? 可思yabo88滚球sykv.com,sykv.cn

?

可思yabo88滚球-人工智能资讯平台sykv.com

脚本在2.2秒就处理完了yabo88滚球!比原来的版本提速4倍! 可思yabo88滚球-人工智能资讯平台sykv.com

之所以能更快的处理yabo88滚球 可思yabo88滚球-AI,sykv.com智能驾驶,人脸识别,区块链,大yabo88滚球

是因为我们使用了4个CPU而不是1个。 可思yabo88滚球-AI,sykv.com人工智能,深度学习,机器学习,神经网络

但是 可思yabo88滚球sykv.com,sykv.cn

如果你仔细看看,会发现“用户”时间几乎为9秒。 可思yabo88滚球sykv.com

那为何程序处理时间为2.2秒,但不知怎么搞得运行时间还是9秒?

可思yabo88滚球-AI,sykv.com智能驾驶,人脸识别,区块链,大yabo88滚球

这似乎不太可能啊?

可思yabo88滚球sykv.com

这是

可思yabo88滚球-人工智能资讯平台sykv.com

因为“用户”时间是所有CPU时间的总和,

可思yabo88滚球-www.sykv.cn,sykv.com

我们最终完成工作的CPU时间总和一样,都是9秒, 可思yabo88滚球sykv.com

但我们使用4个CPU完成的,实际处理yabo88滚球时间只有2.2秒! 本文来自可思yabo88滚球(sykv.com),转载请联系本站及注明出处

注意: 可思yabo88滚球-www.sykv.cn,sykv.com

启用更多Python进程以及给子进程分配yabo88滚球都会占用时间,因此靠这个方法并不能保证总是能大幅提高速度。 内容来自可思yabo88滚球sykv.com

这种方法总能帮我的yabo88滚球处理脚本提速吗?

内容来自可思yabo88滚球sykv.com

如果你有一列yabo88滚球

可思yabo88滚球sykv.com,sykv.cn

并且每个yabo88滚球都能单独处理时,使用我们这里所说的Process Pools是一个提速的好方法。 可思yabo88滚球sykv.com,sykv.cn

下面是一些适合使用并行处理的例子: 可思yabo88滚球sykv.com

从一系列单独的网页服务器日志里抓取统计yabo88滚球。
从一堆XML,CSV和JSON文件中解析yabo88滚球。
对大量图片yabo88滚球做预处理,建立机器学习yabo88滚球集。 可思yabo88滚球sykv.com

但也要记住,Process Pools并不是万能的。 可思yabo88滚球-AI,sykv.com智能驾驶,人脸识别,区块链,大yabo88滚球

使用Process Pool需要在独立的Python处理进程之间来回传递yabo88滚球。

本文来自可思yabo88滚球(sykv.com),转载请联系本站及注明出处

如果你要处理的yabo88滚球不能在处理过程中被有效地传递,这种方法就行不通了。 可思yabo88滚球sykv.com

简而言之,你处理的yabo88滚球必须是Python知道怎么应对的类型。 可思yabo88滚球-AI,sykv.com智能驾驶,人脸识别,区块链,大yabo88滚球

同时

可思yabo88滚球-AI,sykv.com人工智能,深度学习,机器学习,神经网络

也无法按照一个预想的顺序处理yabo88滚球。 可思yabo88滚球-AI,sykv.com智能驾驶,人脸识别,区块链,大yabo88滚球

如果你需要前一步的处理结果来进行下一步,这种方法也行不通。 可思yabo88滚球sykv.com,sykv.cn

那GIL的问题呢? 可思yabo88滚球sykv.com,sykv.cn

你可能知道Python有个叫全局解释器锁(Global Interpreter Lock)的东西,即GIL。

本文来自可思yabo88滚球(sykv.com),转载请联系本站及注明出处

这意味着即使你的程序是多线程的,每个线程也只能执行一个Python指令。

可思yabo88滚球-人工智能资讯平台sykv.com

GIL确保任何时候都只有一个Python线程执行。

内容来自可思yabo88滚球sykv.com

换句话说:

本文来自可思yabo88滚球(sykv.com),转载请联系本站及注明出处

多线程的Python代码并不能真正地并行运行,从而无法充分利用多核CPU。 可思yabo88滚球-www.sykv.cn,sykv.com

但是Process Pool能解决这个问题! 可思yabo88滚球-AI,sykv.com智能驾驶,人脸识别,区块链,大yabo88滚球

因为我们是运行单独的Python实例,每个实例都有自己的GIL。

可思yabo88滚球sykv.com

这样我们获得是真正能并行处理的Python代码!

可思yabo88滚球-人工智能资讯平台sykv.com

不要害怕并行处理!

可思yabo88滚球-人工智能资讯平台sykv.com

有了concurrent.futures库 内容来自可思yabo88滚球sykv.com

Python就能让你简简单单地修改一下脚本后,立刻让你电脑上所有CPU投入到工作中。 可思yabo88滚球-www.sykv.cn,sykv.com

不要害怕尝试这种方法,一旦你掌握了

可思yabo88滚球sykv.com,sykv.cn

它就跟一个for循环一样简单 可思yabo88滚球sykv.com,sykv.cn

却能让你的yabo88滚球处理脚本快到飞起。

可思yabo88滚球sykv.com,sykv.cn

转发量:

网友评论:

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片 匿名?

关于我们?? 免责声明?? 广告合作?? 版权声明?? 联系方式?? 原创投稿?? 网站地图??

Copyright?2005-2019 Sykv.com 可思yabo88滚球 版权所有 ?? ICP备案:京ICP备14056871号

人工智能资讯?? 人工智能资讯?? 人工智能资讯?? 人工智能资讯

?扫码入群
咨询反馈
扫码关注

微信公众号

返回顶部
关闭