我们需要处理的各种目录中有大约500GB的图像。每个图像的大小约为4MB,我们有一个python脚本,一次处理一个图像(它读取元数据并将其存储在数据库中)。每个目录可能需要1-4小时才能处理,具体取决于大小。

我们可以在GNU / Linux操作系统上使用2.2Ghz四核处理器和16GB RAM。当前脚本仅使用一个处理器。利用其他内核和RAM来更快地处理图像的最佳方法是什么?启动多个Python进程来运行脚本会利用其他内核吗?

另一个选择是使用Gearman或Beanstalk之类的东西将工作分配给其他机器。我已经看了多处理库但不知道如何利用它。

解决方案


启动多个Python进程来运行脚本会利用其他内核吗?

是的,如果任务受CPU约束,它将会。这可能是最简单的选择。但是,不要为每个文件或每个目录生成单个进程; 考虑使用像这样的工具,parallel(1)并让它产生每个核心两个进程的东西。

另一个选择是使用Gearman或Beanstalk之类的东西将工作分配给其他机器。

那可能有用。另外,看看ZeroMQPython绑定,它使分布式处理变得非常简单。

我已经看了多处理库但不知道如何利用它。

比如定义一个函数,process它读取单个目录中的图像,连接到数据库并存储元数据。让它返回一个表示成功或失败的布尔值。我们directories是目录处理的列表。然后

import multiprocessing
pool = multiprocessing.Pool(multiprocessing.cpu_count())
success = all(pool.imap_unordered(process, directories))

将并行处理所有目录。如果需要,您还可以在文件级执行并行操作; 这需要更多的修修补补。

请注意,这将在第一次失败时停止; 使其容错需要更多的工作。

本文首发于python黑洞网,博客园同步更新

最新文章

  1. centos6.X使用Apache+Mono搭建asp.net 环境
  2. 【转】lower_case_table_names=1 让MySQL不区分大小写
  3. Linux多进程编程
  4. 【温故而知新-Javascript】使用Web存储
  5. webapi mvc 基础
  6. 文件操作I
  7. 2014年度辛星html教程夏季版第五节
  8. JavaScript---网络编程(2)-函数与数组
  9. PHP 给前面或者后面添加0补位
  10. BZOJ 1028 [JSOI2007]麻将
  11. 在ASP.NET MVC自定义错误页面
  12. CoolBlog开发笔记第4课:数据库模型设计
  13. 前端javascript中字符串的总结
  14. Android必知必会--使用shape制作drawable素材
  15. 博弈之——SG模板
  16. URAL 1099 Work Scheduling (一般图最大匹配) 模板题【带花树】
  17. memcache的简单使用示例
  18. [转]阿里云CentOS 7.1使用yum安装MySql5.6.24
  19. Gridview各种功能+AspNetPager+Ajax实现无刷新存储过程分页 (留着用)
  20. Xpath语法与lxml库的用法

热门文章

  1. C语言接口
  2. 20個命令行工具監控 Linux 系統性能
  3. python浮点数与整数间的转化
  4. Word里的红色、绿色和蓝色波浪线
  5. MySQL MHA+Keepalived
  6. ubuntu 彻底删除软件
  7. Python 语音识别
  8. python写txt文件
  9. vs2005下opengl(glut)的配置记录
  10. Ubuntu12.04安装配置vncserver