返回顶部
首页 > 资讯 > 后端开发 > Python >怎么编写Python代码让数据处理快4倍
  • 117
分享到

怎么编写Python代码让数据处理快4倍

2023-06-16 20:06:00 117人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要介绍“怎么编写python代码让数据处理快4倍”,在日常操作中,相信很多人在怎么编写Python代码让数据处理快4倍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么编写Python代码让数据处理

这篇文章主要介绍“怎么编写python代码让数据处理快4倍”,在日常操作中,相信很多人在怎么编写Python代码让数据处理快4倍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么编写Python代码让数据处理快4倍”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

普通Python处理数据方法

比方说:

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

下面是一个短暂的脚本:

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

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

怎么编写Python代码让数据处理快4倍

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

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

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

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

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

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

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

怎么编写Python代码让数据处理快4倍

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

我们再运行一遍程序

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

怎么编写Python代码让数据处理快4倍

电脑有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代码让数据处理快4倍

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

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

怎么编写Python代码让数据处理快4倍

默认情况下:

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

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

***一步:

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

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

怎么编写Python代码让数据处理快4倍

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

怎么编写Python代码让数据处理快4倍

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

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

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

干得漂亮!

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

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

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

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

怎么编写Python代码让数据处理快4倍

我们来运行一下这段脚本

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

怎么编写Python代码让数据处理快4倍

脚本在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代码!

到此,关于“怎么编写Python代码让数据处理快4倍”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: 怎么编写Python代码让数据处理快4倍

本文链接: https://lsjlt.com/news/285173.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么编写Python代码让数据处理快4倍
    这篇文章主要介绍“怎么编写Python代码让数据处理快4倍”,在日常操作中,相信很多人在怎么编写Python代码让数据处理快4倍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么编写Python代码让数据处理...
    99+
    2023-06-16
  • 几行代码让Python函数执行快30倍
    目录1、Python 多线程处理的基本指南2、多处理入门3、它为什么如此重要?4、实现5、基准测试Python 是一种流行的编程语言,也是数据科学社区中最受欢迎的语言。与其他流行编程...
    99+
    2024-04-02
  • 怎么让python处理速度翻倍
    本篇内容主要讲解“怎么让python处理速度翻倍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么让python处理速度翻倍”吧!进程在面试的时候,我们都会记住一个概念,进程是系统资源分配的最小...
    99+
    2023-06-02
  • 怎么写Python代码提高数据处理脚本速度
    这篇文章主要介绍“怎么写Python代码提高数据处理脚本速度”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么写Python代码提高数据处理脚本速度”文章能帮助大家解决问题。普通Python处理数据...
    99+
    2023-06-29
  • python遍历迭代器自动链式处理数据的代码怎么写
    python遍历迭代器自动链式处理数据的代码怎么写,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。python遍历迭代器自动链式处理数据pytorch.utils.data可兼容...
    99+
    2023-06-26
  • Vue处理循环数据流程的代码怎么写
    这篇文章主要介绍了Vue处理循环数据流程的代码怎么写的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue处理循环数据流程的代码怎么写文章都会有所收获,下面我们一起来看看吧。下面就展示使用vue处理循环的一个例子...
    99+
    2023-07-06
  • Python中怎么理解PyPy能让代码运行得更快
    这篇文章主要介绍“Python中怎么理解PyPy能让代码运行得更快”,在日常操作中,相信很多人在Python中怎么理解PyPy能让代码运行得更快问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python中怎么...
    99+
    2023-06-16
  • Python 函数式编程:让代码更简单、更快、更强大
    更简单的代码 函数式编程使用函数作为构建块,将复杂任务分解为更小的、可重用的组件。通过使用 lambda 表达式和内建的高阶函数,例如 map() 和 reduce(),可以简洁地处理数据。例如: # 传统方法 def double(x)...
    99+
    2024-04-02
  • python爱心代码编程怎么写
    步骤为:1、确定爱心的样式和大小。在纸上画出你想要的爱心形状,然后将其转化为字符打印的方式;2、创建一个列表,用来存储爱心的每一行字符;3、根据爱心的形状,将每一行的字符添加到列表中。可以使用空格、星号等字符来表示爱心的形状;4、使用循环遍...
    99+
    2023-11-20
    python 代码编程
  • Python读取Hive数据库代码怎么写
    今天小编给大家分享一下Python读取Hive数据库代码怎么写的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。实际业务读取hi...
    99+
    2023-07-05
  • 怎么用Python代码编写记忆数独游戏
    这篇文章给大家介绍怎么用Python代码编写记忆数独游戏,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。前言freegames是Apache2许可的免费Python游戏集合,旨在用于教育和娱乐,完全是开源的,我们只要引用...
    99+
    2023-06-02
  • python代码爱心怎么编写简单
    可以使用 python 的 matplotlib 库绘制爱心。首先,导入 matplotlib.pyplot 并定义 x 和 y 坐标,使用参数方程生成爱心形状。然后,使用 plt.pl...
    99+
    2024-04-02
  • oracle数据库怎么写代码
    要使用 oracle 数据库编写代码,需要遵循以下步骤:1. 安装 oracle 数据库管理系统 (dbms) 和集成开发环境 (ide)。2. 创建数据库连接。3. 使用 sql 编写...
    99+
    2024-04-19
    oracle python c++
  • python求素数代码怎么写
    以下是一个用python编写的求素数的代码:```pythondef is_prime(n):if n ...
    99+
    2023-08-25
    python
  • python怎么编写数据库界面
    在Python中,可以使用各种库来编写数据库界面,其中最常用的库之一是Tkinter。以下是使用Tkinter编写一个简单的数据库界...
    99+
    2023-08-09
    python 数据库
  • PyPy 是怎么让Python代码运行得和C一样快
    这篇文章的内容主要围绕PyPy 是怎么让Python代码运行得和C一样快进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!1. 引言作为一名算...
    99+
    2023-06-26
  • python九九乘法表编程代码怎么写
    以下是Python中打印九九乘法表的代码:```pythonfor i in range(1, 10):for j in range...
    99+
    2023-10-11
    python
  • mongodb创建数据库代码怎么写
    在MongoDB中,可以使用以下代码来创建数据库:```javascript// 引入MongoDB驱动程序const MongoC...
    99+
    2023-08-24
    mongodb 数据库
  • VBS字符串编码转换函数代码怎么写
    这篇“VBS字符串编码转换函数代码怎么写”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“VBS字符串编码转换函数代码怎么写”文...
    99+
    2023-07-06
  • python实现烟花的实例代码怎么编写
    本篇文章给大家分享的是有关python实现烟花的实例代码怎么编写,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。实现代码如下:# -*- coding:&nb...
    99+
    2023-06-22
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作