由于项目需要100w张图片,在网上下载的图片数据往往是很大尺寸的,此时无论是对照片的存储,转移等操作往往需要消耗大量时间,为了更好的对图片操作,于是对图片进行尺寸缩小,由原先的100多G变换到十多G,从而很好的对图片进行上传存储等操作。刚开始时候处理图片没用用到进程,处理起来很慢,于是在网上查找有关python进程的方法,经过研究使用Python 多进程 multiprocessing.Pool类。

这里将对multiprocessing.Pool类进行简要介绍:

Pool类

在使用python进行系统管理时,特别是同时操作多个文件目录或者远程控制多台主机,并行操作可以节约大量的时间。Pool类可以提供指定数量的进程供用户调用,当有新的请求提交到Pool中时,如果池还没有满,就会创建一个新的进程来执行请求。如果池满,请求就会告知先等待,直到池中有进程结束,才会创建新的进程来执行这些请求。

下面对multiprocessing.Pool类中的几个方法进行介绍:

  • map(func, iterable[, chunksize=None])

Pool类中的map方法,与内置的map函数用法行为基本一致,它会使进程阻塞直到返回结果。注意,虽然第二个参数是一个迭代器,但在实际使用中,必须在整个队列都就绪后,程序才会运行子进程。

  • close()

关闭进程池(pool),使其不在接受新任务。

  • terminate()

​​​​​​​结束工作进程,不在处理未处理的任务。

  • join()

​​​​​​​主进程阻塞等待子进程的退出,join方法必须在close或terminate之后使用。

这里是我对100w图片做尺寸处理时的代码:

import os
import time
from PIL import Image
from multiprocessing import Pooldef get_file_path(path):img_paths = []dirs = os.listdir(path)for file_dir in dirs:file_path = os.path.join(path, file_dir)img_names = os.listdir(file_path)for img_name in img_names:img_path = os.path.join(file_path, img_name)img_paths.append(img_path)return img_pathsdef resize_image(file_name):try:img = Image.open(file_name)new_img = img.resize((250, 250), Image.ANTIALIAS)new_img.save(file_name)except:print(file_name)if __name__ == '__main__':start = time.time()path = r'C:\Users\Alvin_Fang\Downloads\identities_0'img_paths = get_file_path(path)pool = Pool(6)pool.map(resize_image, img_paths)pool.close()pool.join()end = time.time()print(end - start)

​​​​​​​注意:在Windows上要想使用进程模块,就必须把有关进程的代码写在当前.py文件的if __name__ == ‘__main__’ :语句的下面,才能正常使用Windows下的进程模块,Unix/Linux下则不需要。

python多进程处理大量图片相关推荐

  1. python多进程详解

    目录 python多进程 序.multiprocessing 一.Process process介绍 例1.1:创建函数并将其作为单个进程 例1.2:创建函数并将其作为多个进程 例1.3:将进程定义为 ...

  2. Python 多进程开发与多线程开发

    我们先来了解什么是进程? 程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程.程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本:进程 ...

  3. python多进程_python语法:多进程

    之前在一篇文章中写过,有关于Python线程的问题: 是枝裕和:内:用python多线程同时处理大量文件​zhuanlan.zhihu.com 当然我的写的文章都是面对于一些初学者和python代码实 ...

  4. 取代Python多进程!伯克利开源分布式框架Ray

    Ray由伯克利开源,是一个用于并行计算和分布式Python开发的开源项目.本文将介绍如何使用Ray轻松构建可从笔记本电脑扩展到大型集群的应用程序. 并行和分布式计算是现代应用程序的主要内容.我们需要利 ...

  5. python 多进程_说说Python多线程与多进程的区别?

    公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开始, ...

  6. python多进程存储数据_Python 多进程及进程间通信

    python 因 GIL 的存在,处理计算密集型的任务时无法高效利用多核 CPU 的计算资源,这时就需要使用多进程来提高对 CPU 的资源利用.Python 多进程主要用 multiprocessin ...

  7. python 多进程异常处理

    前言 最近项目用到了Python作为网站的前端,使用的框架是基于线程池的Cherrypy,但是前端依然有一些比较'重'的模块.由于python的多线程无法很好的利用多核的性质,所以觉得把这些比较'重' ...

  8. python多进程断点续传分片下载器

    python多进程断点续传分片下载器 标签:python 下载器 多进程 因为爬虫要用到下载器,但是直接用urllib下载很慢,所以找了很久终于找到一个让我欣喜的下载器.他能够断点续传分片下载,极大提 ...

  9. Python 多进程、多线程启动

    本文仅供学习交流使用,如侵立删!demo下载见文末 Python 多进程启动 def main(self, num):"""多进程启动ValueError: Pool n ...

最新文章

  1. 《统计学习方法》读书笔记(1)---学习的要素
  2. 圣剑神域单机版服务器维护,圣剑神域单机版
  3. SQL Server 2012 Managed Service Account
  4. 牛客-小w的魔术扑克【并查集】
  5. Java应用程序中的验证
  6. 【转载】RocketMQ优秀文章
  7. 将命令结果赋给变量_不得不了解的quot;变量quot;(2)—— 变量的赋值
  8. 系统学习机器学习之神经网络(十一) --TDNN
  9. c语言万年历自动翻页,C语言实现万年历效果
  10. MySQL命令行客户端(一)客户端选项
  11. STM32开发,使用IAR软件建立工程
  12. 基于人体姿态识别的AI健身系统(浅谈
  13. java播放器显示歌词,android 音乐播放器显示歌词源码(天天动听悬浮歌词)
  14. ARM嵌入式开发入门必要步骤
  15. Linux ext4 rm 数据恢复原理(一)-文件系统结构及文件解析
  16. 原生js以及jQuery删除节点
  17. shell(37) : java控制台运行打印颜色字体
  18. 3D游戏之父--John Carmack连载系列(四)
  19. 每日MySQL之024:FLUSH TABLES
  20. 25.Linux系统忘记登录密码解决办法(别着急,还能抢救一下)

热门文章

  1. java 快速开发平台 有代码生成器 springmvc SSM后台框架源码
  2. shell181网格划分_【2017年整理】ANSYS中SHELL181单元理解和参数详解.docx
  3. 计算机视觉(图像)技术:视觉图像搜索综述
  4. 如何调成适用计算机的分辨率,电脑分辨率不适合屏幕,怎样设置都不对
  5. 绝地求生服务器维护错误,哪些是绝地求生常见异常解决方案?
  6. Python:(使用matplotlib画图)次坐标轴,两个坐标轴
  7. 看过后看你还有没有勇气玩成语接龙了
  8. 庄子 内篇 齐物论第二
  9. 给定均值和方差,不使用库函数生成1000个符合正太分布的随机数
  10. 最硬核毕业证:带着自己设计的芯片毕业,国科大16级本科生交付「一生一芯」首期成果...