在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文档 根据传递的值,构建 ...
随机推荐
- Windows程序设计(七)--鼠标
7.2 客户区鼠标消息 当鼠标移过窗口的显示区域时,窗口消息处理程序收到WM_MOUSEMOVE消息.当在窗口的显示区域中按下或者释放一个鼠标按键时,窗口消息处理程序会接收到下面这些消息: 键 按下 ...
- 【学习总结】java数据结构和算法-第二章-数据结构和算法概述
总目录链接 [学习总结]尚硅谷2019java数据结构和算法 github:javaDSA 目录 数据结构和算法的关系 几个实际编程中的问题 线性结构和非线性结构 数据结构和算法的关系 几个实际编程中 ...
- 一键部署YApi
编写docker-compose.yml version: '2.1' services: yapi: image: mrjin/yapi:latest # build: ./ container_n ...
- 基于ZYNQ XC7Z045 FFG 900的高性能计算模块
一.板卡概述 本板卡基于Xilinx公司的FPGA XC7Z045 FFG 9000 芯片, 该平台为设计和验证应用程序提供了一个完整的开发平台.该平台使设计师能够更加简单进行高性能的原型设计,并且通 ...
- squid代理与缓存(下)
squid代理与缓存(下) 6. squid代理模式案例 6.1 squid传统正向代理生产使用案例 6.1.1 squid传统正向代理两种方案 (1)普通代理服务器 作为代理服务器,这是SQUID的 ...
- win10 中文
按 WinKey+I 鍵,開啟「設定」對話框,再選取「時間與語言」選項.
- 4.VUE前端框架学习记录四:Vue组件化编码2
VUE前端框架学习记录四:Vue组件化编码2文字信息没办法描述清楚,主要看编码Demo里面,有附带完整的代码下载地址,有需要的同学到脑图里面自取.脑图地址http://naotu.baidu.com/ ...
- LeetCode(力扣)——Search in Rotated Sorted Array 搜索旋转排序数组 python实现
题目描述: python实现 Search in Rotated Sorted Array 搜索旋转排序数组 中文:假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1 ...
- C#高级编程(32章)ADO.net
32.2高效地使用连接 sqlConnection类是针对sql的,而OleDbConnection 是针对其他比如access的,另外还有odbcConnection是针对odbc的,sql的访问优 ...
- java list集合元素根据某些字段排序
一.jdk1.6的环境下 新建ComparatorSort类,并实现Comparator接口,重写compare方法 降序排序:o1的元素>o2的元素,并返回-1:o1的元素小于o2的元素,并返 ...