当前位置 : IT培训网 > IT培训 > 新闻资讯 > 【python培训班】学习好这几行代码 python数据处理才更快

【python培训班】学习好这几行代码 python数据处理才更快

时间:2019-06-26 11:00:59  来源:编程网  作者:IT培训网  已有:名学员访问该课程
标签(Tag):   Python(41)
Python是一门非常适合处理数据和自动化完成重复性工作的编程语言,我们在用数据训练机器学习模型之前,通常都需要对数据进行预处理,而Python就非常适合完成这项工作,比如需要重新调整几十万张图像的尺寸,用Python没问题!

三行Python代码,可以让你的数据处理快别人4倍!

Python的介绍:

Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。

Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。

如何利用python快速处理数据:

Python是一门非常适合处理数据和自动化完成重复性工作的编程语言,我们在用数据训练机器学习模型之前,通常都需要对数据进行预处理,而Python就非常适合完成这项工作,比如需要重新调整几十万张图像的尺寸,用Python没问题!

你几乎总是能找到一款可以轻松完成数据处理工作的Python库。

然而

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

默认情况下,Python程序使用一个CPU以单个进程运行。

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

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

你的电脑其实有75%甚至更多的计算资源就在那闲着没事干!

今天就教大家怎样通过并行运行Python函数,充分利用你的电脑的全部处理能力。

得益于Python的 concurrent.futures 模块,

我们只需3行代码

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

普通Python处理数据方法

比方说:

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

下面是一个短暂的脚本:

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

然后用Pillow图像处理库为每张图像保存大小为128像素的缩略图:

【python培训班】学习好这几行代码 python数据处理才更快_www.itpxw.cn

【python培训班】学习好这几行代码 python数据处理才更快

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

你会在数据处理脚本中经常见到这种方法:

首先获得你想处理的文件(或其它数据)的列表

写一个辅助函数,能够处理上述文件的单个数据

使用for循环调用辅助函数,处理每一个单个数据,一次一个。

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

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

【python培训班】学习好这几行代码 python数据处理才更快_www.itpxw.cn

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

我们再运行一遍程序

看看程序运行时的活动监视器情况:

【python培训班】学习好这几行代码 python数据处理才更快_www.itpxw.cn

电脑有75%的处理资源处于闲置状态!这是什么情况?

这个问题的原因就是我的电脑有4个CPU,但Python只使用了一个。

所以程序只是卯足了劲用其中一个CPU,另外3个却无所事事。

因此我需要一种方法能将工作量分成4个我能并行处理的单独部分。

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

试试创建多进程

下面是一种可以让我们并行处理数据的方法:

将JPEG文件划分为4小块。运行Python解释器的4个单独实例。

让每个Python实例处理这4块数据中的一块。

将这4部分的处理结果合并,获得结果的最终列表。

4个Python拷贝程序在4个单独的CPU上运行,

处理的工作量应该能比一个CPU大约高出4倍,

对吧?

最妙的是,Python已经替我们做完了最麻烦的那部分工作。

我们只需告诉它想运行哪个函数以及使用多少实例就行了,剩下的工作它会完成。

整个过程我们只需要改动3行代码。

首先

我们需要导入concurrent.futures库

这个库就内置在Python中:

【python培训班】学习好这几行代码 python数据处理才更快_www.itpxw.cn

接着,我们需要告诉Python启动4个额外的Python实例。

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

【python培训班】学习好这几行代码 python数据处理才更快_www.itpxw.cn

默认情况下:

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

所以如果你有4个CPU,就会启动4个Python进程。

最后一步:

让创建的Process Pool用这4个进程在数据列表上执行我们的辅助函数。

完成这一步,我们要将已有的for循环:

【python培训班】学习好这几行代码 python数据处理才更快_www.itpxw.cn

替换为新的调用executor.map():

【python培训班】学习好这几行代码 python数据处理才更快_www.itpxw.cn

该executor.map()函数调用时需要输入辅助函数和待处理的数据列表。

这个函数能帮我完成所有麻烦的工作

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

干得漂亮!

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

Executor.map()函数会按照和输入数据相同的顺序返回结果。

所以我用了Python的zip()函数作为捷径,一步获取原始文件名和每一步中的匹配结果。

这里是经过这三步改动后的程序代码:

【python培训班】学习好这几行代码 python数据处理才更快_www.itpxw.cn

我们来运行一下这段脚本

看看它是否以更快的速度完成数据处理:

【python培训班】学习好这几行代码 python数据处理才更快_www.itpxw.cn

脚本在2.2秒就处理完了数据!比原来的版本提速4倍!

之所以能更快的处理数据

是因为我们使用了4个CPU而不是1个。

但是

如果你仔细看看,会发现“用户”时间几乎为9秒。

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

这似乎不太可能啊?

这是

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

我们最终完成工作的CPU时间总和一样,都是9秒,

但我们使用4个CPU完成的,实际处理数据时间只有2.2秒!

注意:

启用更多Python进程以及给子进程分配数据都会占用时间,因此靠这个方法并不能保证总是能大幅提高速度。

这种方法总能帮我的数据处理脚本提速吗?

如果你有一列数据

并且每个数据都能单独处理时,使用我们这里所说的Process Pools是一个提速的好方法。

下面是一些适合使用并行处理的例子:

从一系列单独的网页服务器日志里抓取统计数据。

从一堆XML,CSV和JSON文件中解析数据。

对大量图片数据做预处理,建立机器学习数据集。

但也要记住,Process Pools并不是万能的。

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

如果你要处理的数据不能在处理过程中被有效地传递,这种方法就行不通了。

简而言之,你处理的数据必须是Python知道怎么应对的类型。

同时

也无法按照一个预想的顺序处理数据。

如果你需要前一步的处理结果来进行下一步,这种方法也行不通。

那GIL的问题呢?

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

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

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

换句话说:

多线程的Python代码并不能真正地并行运行,从而无法充分利用多核CPU。

但是Process Pool能解决这个问题!

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

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

不要害怕并行处理!

有了concurrent.futures库

Python就能让你简简单单地修改一下脚本后,立刻让你电脑上所有CPU投入到工作中。

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

它就跟一个for循环一样简单

却能让你的数据处理脚本快到飞起。

知识扩展:

Python 发展历史

Python 是由 Guido van Rossum 在八十年代末和九十年代初,在荷兰国家数学和计算机科学研究所设计出来的。

Python 本身也是由诸多其他语言发展而来的,这包括 ABC、Modula-3、C、C++、Algol-68、SmallTalk、Unix shell 和其他的脚本语言等等。

像 Perl 语言一样,Python 源代码同样遵循 GPL(GNU General Public License)协议。

现在 Python 是由一个核心开发团队在维护,Guido van Rossum 仍然占据着至关重要的作用,指导其进展。

Python 特点

1.易于学习:Python有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单。

2.易于阅读:Python代码定义的更清晰。

3.易于维护:Python的成功在于它的源代码是相当容易维护的。

4.一个广泛的标准库:Python的最大的优势之一是丰富的库,跨平台的,在UNIX,Windows和Macintosh兼容很好。

5.互动模式:互动模式的支持,您可以从终端输入执行代码并获得结果的语言,互动的测试和调试代码片断。

6.可移植:基于其开放源代码的特性,Python已经被移植(也就是使其工作)到许多平台。

7.可扩展:如果你需要一段运行很快的关键代码,或者是想要编写一些不愿开放的算法,你可以使用C或C++完成那部分程序,然后从你的Python程序中调用。

8.数据库:Python提供所有主要的商业数据库的接口。

9.GUI编程:Python支持GUI可以创建和移植到许多系统调用。

10.可嵌入: 你可以将Python嵌入到C/C++程序,让你的程序的用户获得"脚本化"的能力。

顶一下
(0)
0%
踩一下
(0)
0%

IT培训0元试听 每期开班座位有限.0元试听抢座开始! IT培训0元试听

  • 姓名 : *
  • 电话 : *
  • QQ : *
  • 留言 :
  • 验证码 : 看不清?点击更换请输入正确的验证码

在线咨询在线咨询

温馨提示 : 请保持手机畅通,咨询老师为您
提供专属一对一报名服务。

------分隔线----------------------------
------分隔线----------------------------

推荐内容