python】Python运行时数据量大会影响图片吗?

2020-04-09 16:58发布

1条回答
卡卡
2楼 · 2020-07-02 21:05

由于项目需要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 Pool

 

def 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_paths

 

def 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下则不需要。


相关问题推荐

  • 回答 1

    可以试下在cmd命令行执行,编辑器中对turtle的支持度不是很好。

  • 回答 6

    人工智能是一门起步晚却发展快速的科学。20 世纪以来科学工作者们不断寻求着赋予机器人类智慧的方法。现代人工智能这一概念是从英国科学家图灵的寻求智能机发展而来,直到1937年图灵发表的论文《理想自动机》给人工智能下了严格的数学定义,现实世界中实际要...

  • 回答 7

    代理ip网址http://www.goubanjia.com/http://www.ip181.com/https://www.kuaidaili.com/python 环境安装requests库安装bs4库proxies设置代理服务器地址proxies = {'http':  'http://61.155.164.110:3128'}http://www.goub......

  • 回答 2

    要求:用户正确输入用户名和密码便成功登陆,分别有三次机会输入用户名和密码,超过3次便锁定分析:用两个while循环即可,代码如下:user_name = Brettpassword = 1314i = 0n = 0Is_exit = False  #进入循环标志while not Is_exit:User_name = input(please ...

  • 回答 2

    MacOS设置环境变量path的完全总结  一、MacOS加载bash shell 环境变量的加载顺序   mac 一般使用bash作为默认shell,Mac系统的环境变量,加载顺序为:1、系统级别的/etc/profile                                              ...

  • 回答 4

    当你运行代码的时候,需要你指定闹钟的时间,然后闹钟就会在指定的时间想起来。电脑pytho加载time模块,获取此时此刻的时间:import timet = time.localtime()print(t)时间是以字典的形式出现的。从字典里面提取时间信息:now = time.strftime(%H %M, t).spli...

  • 回答 5

    在几千条数据中有正负数,筛选出同一供应商下正负数相加为零的数据,正负数相加有可能为一正一负相加为零,也有可能是一正多负,也有可能一负多正,总体是将可以所有正负数相加为零的数据标注颜色出来。excel论坛上说计算量太 ...可以用pandas来处理...

  • 回答 2
    已采纳

    import sqlite3p = sqlite3.connect(file:memDB1?mode=memory&cache=shared, uri=True)p.execute('CREATE TABLE tbTest (fld1, fld2)')p.execute(INSERT INTO tbTest VALUES ('fld1', 'fld2'...

  • 回答 9

    Python可以说是这几门著名语言里最易理解的了,这就是Python的优点之一,相比较其他语言,PHP,Java,C C++ C#这些语言,

  • 回答 19

    学测试吧,简单容易些

  • 回答 16

    第一语言现在还是java比较好找工作,第二语言学Python或者是go语言都可以了解一下

  • 回答 10

    一、模块介绍1. 定义:模块:本质就是.py结尾的python文件(文件名:test.py,对应的模块名:test)用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能)2. 语法:• import 语句当解释器遇到import语句,如果模块在当前的搜索路径就会被导入。...

  • 回答 1

    PythonPython是一种面向对象的解释型计算机程序设计语言,具有丰富强大的库,常被称为胶水语言,能够把其他语言制作的各种模块轻松链接在一起。因此Python具有:简单易学、数据分析能力强的特点。很多科学家都会自学Python,进行科研数据分析,由此可见Python...

  • 回答 3

    1、简单;2、易学;3、免费开源;4、自动内存管理;5、可以移植;6、解释性;7、面向对象;8、可扩展;9、丰富的第三方库

  • 回答 1

    人工智能是未来发展的一种趋势,也是当下非常流行的行业,是一门包含十分广泛的科学,由不同的领域组合而成,比如说机器学习、计算机视觉等等,研究人工智能涉及的方方面面是非常复杂的,那么为什么说做人工智能使用python比较好呢?1、Python遵循简单、优雅...

  • 回答 2

    Python 是脚本语言,也就是中间件语言,其内核仍然百是纯 c 的性能表达的,而主要性能消耗在脚本的实时编译上。度而对比c,同样的功能,python可以表达比c更加精炼,当然牺牲了一些性能。如果确实对某知个模组性能不满意,还可以使用 c 编写 Python 模块为其...

没有解决我的问题,去提问