美文网首页嵌牛IT观察
python 多线程处理图像,充分利用CPU

python 多线程处理图像,充分利用CPU

作者: Daffodil_51e5 | 来源:发表于2019-11-27 19:11 被阅读0次

姓名:李沂配 19021210904

转载自:https://blog.csdn.net/MrCharles/article/details/103189788

【嵌牛导读】:Python易于学习,使用方便,是一门非常适合处理数据和自动化完成重复性工作的编程语言,python在用数据训练机器学习模型之前对数据进行预处理的作用非常强大,比起其它语言,python简单几行就可以实现功能,有非常大的开发前景。本文 介绍了python中多线程方法处理图像,可以充分利用CPU。

【嵌牛鼻子】:  python 多线程  数据

【嵌牛提问】:你还能列出哪些python多线程处理方法适用范围?

【嵌牛正文】:

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

然而,虽然Python易于学习,使用方便,但它并非运行速度最快的语言。默认情况下,Python程序使用一个CPU以单个进程运行。不过如果你是在最近几年配置的电脑,通常都是四核处理器,也就是有8个CPU。这就意味着在你苦苦等待Python脚本完成数据处理工作时,你的电脑其实有90%甚至更多的计算资源就在那闲着没事干!

得益于Python的 concurrent.futures 模块,我们只需3行代码,就能将一个普通数据处理脚本变为能并行处理数据的脚本,提速8倍。

处理脚本


普通Python处理数据方法

比方说,我们有一个全是图像数据的文件夹,想用Python为每张图像做一些处理。

脚本1

这段脚本沿用了一个简单的模式,你会在数据处理脚本中经常见到这种方法:首先获得你想处理的文件(或其它数据)的列表,写一个辅助函数,能够处理上述文件的单个数据, 使用for循环调用辅助函数,处理每一个单个数据,一次一个。

但是这只是利用了CPU的一个线程,使用率很低。

试试创建多线程

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

1.将所有JPEG文件划分为8小块。

2.运行Python解释器的8个单独实例。

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

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

4个Python拷贝程序在8个单独的CPU上运行,处理的工作量应该能比一个CPU大约高出8倍,对吧?

Python已经替我们做完了最麻烦的那部分工作。我们只需告诉它想运行哪个函数以及使用多少实例就行了,剩下的工作它会完成。整个过程我们只需要改动3行代码。

脚本2

该executor.map()函数调用时需要输入辅助函数和待处理的数据列表。这个函数能帮我完成所有麻烦的工作,包括将列表分为多个子列表、将子列表发送到每个子进程、运行子进程以及合并结果等。干得漂亮!这也能为我们返回每个函数调用的结果。Executor.map()函数会按照和输入数据相同的顺序返回结果。所以用Python的zip()函数作为捷径,一步获取原始文件名和每一步中的匹配结果。

适用的问题

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

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

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

不适用的问题

使用Process Pool需要在独立的Python处理进程之间来回传递数据。如果你要处理的数据不能在处理过程中被有效地传递,这种方法就行不通了。简而言之,你处理的数据必须是Python知道怎么应对的类型。

1.如果样本之间不是独立的,需要联合处理

2.少量样本

相关文章

  • python 多线程处理图像,充分利用CPU

    姓名:李沂配 19021210904 转载自:https://blog.csdn.net/MrCharles/ar...

  • CountDownLatch使用

    CountDownLatch结合多线程可以控制并发,异步先行,并发阻塞,充分利用多核cpu,同时处理多项事情,底层...

  • python学习笔记之--多进程编程

    简介 前面学习了python语言的多线程编程,由于全局解释器锁的引入,多线程编程无法充分利用多CPU的性能。而py...

  • PIL基本操作

    PIL: python图像处理类库 PIL(Python Imaging Library Python,图像处理类...

  • 为什么要使用多线程?

    充分利用多核CPU多线程可以真正充分利用和发挥多核CPU的优势,同时独立完成N个任务而不互相干扰。 提高运行效率可...

  • 线程相关

    1、用多线程的目的是什么? 充分利用cpu资源,并发做多件事 2、单核cpu机器上适不适合用多线程? 适合,如果是...

  • Java 多线程实现(一)

    多线程的目的 提到多线程就只有一个目录,更好的利用CPU资源,我们让CPU同时处理多个任务,缩短计算和处理时间。 ...

  • Java基础(多线程)

    多线程概述 多线程是Java的特点之一, 掌握多线程编程技术, 可以充分利用CPU的资源,更容易解决实际中的问题,...

  • Python进行基本的图像操作与处理

    PIL(Python Imaging Library Python,图像处理类库)提供了通用的图像处理功能,以及大...

  • (十八)IO密集型和CPU密集型

    一、计算密集型 需非常多CPU计算资源,让每个CPU核心都参与计算,CPU性能充分利用,避免过多线程上下文切换...

网友评论

    本文标题:python 多线程处理图像,充分利用CPU

    本文链接:https://www.haomeiwen.com/subject/pakmwctx.html