在Python中处理大型文件的最快方法
我们需要处理的各种目录中有大约500GB的图像。每个图像的大小约为4MB,我们有一个python脚本,一次处理一个图像(它读取元数据并将其存储在数据库中)。每个目录可能需要1-4小时才能处理,具体取决于大小。
我们可以在GNU / Linux操作系统上使用2.2Ghz四核处理器和16GB RAM。当前脚本仅使用一个处理器。利用其他内核和RAM来更快地处理图像的最佳方法是什么?启动多个Python进程来运行脚本会利用其他内核吗?
另一个选择是使用Gearman或Beanstalk之类的东西将工作分配给其他机器。我已经看了多处理库但不知道如何利用它。
解决方案
启动多个Python进程来运行脚本会利用其他内核吗?
是的,如果任务受CPU约束,它将会。这可能是最简单的选择。但是,不要为每个文件或每个目录生成单个进程; 考虑使用像这样的工具,parallel(1)并让它产生每个核心两个进程的东西。
另一个选择是使用Gearman或Beanstalk之类的东西将工作分配给其他机器。
那可能有用。另外,看看ZeroMQ的Python绑定,它使分布式处理变得非常简单。
我已经看了多处理库但不知道如何利用它。
比如定义一个函数,process它读取单个目录中的图像,连接到数据库并存储元数据。让它返回一个表示成功或失败的布尔值。我们directories是目录处理的列表。然后
import multiprocessing
pool = multiprocessing.Pool(multiprocessing.cpu_count())
success = all(pool.imap_unordered(process, directories))
将并行处理所有目录。如果需要,您还可以在文件级执行并行操作; 这需要更多的修修补补。
请注意,这将在第一次失败时停止; 使其容错需要更多的工作。
本文首发于python黑洞网,博客园同步更新
在Python中处理大型文件的最快方法的更多相关文章
- python中readline判断文件读取结束的方法
注:内容来自网络 本文实例讲述了python中readline判断文件读取结束的方法.分享给大家供大家参考.具体分析如下: 大家知道,python中按行读取文件可以使用readline函数,下面现介绍 ...
- python中__init__.py文件的作用
问题 在执行models.py时,报ImportError:No module named transwarp.db的错误,但明明transwarp下就有db.py文件,路径也没有错误.真是想不通.后 ...
- python中逐行读取文件的最佳方式_Drupal_新浪博客
python中逐行读取文件的最佳方式_Drupal_新浪博客 python中逐行读取文件的最佳方式 (2010-08-18 15:59:28) 转载▼ 标签: python ...
- python中执行该文件,就调用 mian 方法
代码: test.py import student def main(): st = student.student(1001, 'tommy', 18) st.sing() st.dance() ...
- Python中__init__.py文件的作用详解
转自http://www.jb51.net/article/92863.htm Python中__init__.py文件的作用详解 http://www.jb51.net/article/86580. ...
- 转载:【学习之家】Python中__init__.py文件的作用
Python中__init__.py文件的作用详解 Python中__init__.py文件的作用详解 来源:学习之家 作者:xuexi110 人气:357 发布时间:2016-09-29 摘要:__ ...
- python中处理.mat文件
python中处理.mat文件 背景 在实际使用python的时候,发现很多数据都是使用.mat的形式保存,所以,如何使用python读写.mat文件成为了许多python使用者必备的技能. -v7. ...
- python中操作csv文件
python中操作csv文件 读取csv improt csv f = csv.reader(open("文件路径","r")) for i in f: pri ...
- .net中创建xml文件的两种方法
.net中创建xml文件的两种方法 方法1:根据xml结构一步一步构建xml文档,保存文件(动态方式) 方法2:直接加载xml结构,保存文件(固定方式) 方法1:动态创建xml文档 根据传递的值,构建 ...
随机推荐
- html中内联元素和块级元素的区别
1.下表列出了内联元素和块级元素的主要区别 html中内联元素和块级元素的区别 块级元素 行内元素 独占一行,默认情况下,其宽度自动填满其父元素宽度 相邻的行内元素会排列在同一行里,直到一行排不下,才 ...
- Linux系统平台调优
- shell本地变量和环境变量的对比
- 基于TMS320C6455、XC5VSX95T 的6U CPCI无线通信处理平台
基于TMS320C6455.XC5VSX95T 的6U CPCI无线通信处理平台 1. 板卡概述 本板卡由我公司自主研发,基于CPCI架构,符合PICMG2.0 D3.0标准,包含双TI TMS3 ...
- Sass--传一个不带值的参数
Sass 的混合宏有一个强大的功能,可以传参,那么在 Sass 中传参主要有以下几种情形: A) 传一个不带值的参数 在混合宏中,可以传一个不带任何值的参数,比如: @mixin border-rad ...
- spring data mongodb CURD
一.添加 Spring Data MongoDB 的MongoTemplate提供了两种存储文档方式,分别是save和insert方法,这两种的区别: (1)save :我们在新增文档时,如果有一 ...
- centos7安装nginx并配置web前端环境。
1.安装nginx -sudo yum install nginx 2.启动nginx - systemctl start nginx 3.修改nginx路径配置,/etc/nginx/nginx.c ...
- 全球的IPv6部署急剧增加,但中国几乎没有一个地方部署?
全球的IPv6部署继续增加,但中国在IPv6方面还需要努力,从部署图上分析,中国几乎没有几个地方是普及IPv6的.这6年来,自世界IPv6发布以来,全球网络和服务提供商的IPv6部署水平急剧增加.如图 ...
- Linux进程管理——查看内存的工具
Linux进程管理——查看内存的工具 一查看内存的工具vmstat vmstat命令:虚拟内存信息vmstat [options] [delay [count]]vmstat 2 5 [root@ce ...
- 新增16条设计规约!阿里巴巴Java开发手册(详尽版)开放下载!
<阿里巴巴Java开发手册>是阿里内部Java工程师所遵循的开发规范,涵盖编程规约.单元测试规约.异常日志规约.MySQL规约.工程规约.安全规约等,这是近万名阿里Java技术精英的经验总 ...