【发布时间】:2015-01-22 20:24:31
【问题描述】:
我们需要处理的各个目录中有大约 500GB 的图像。每个图像大小约为 4MB,我们有一个 python 脚本来一次处理每个图像(它读取元数据并将其存储在数据库中)。每个目录可能需要 1-4 小时来处理,具体取决于大小。
我们在 GNU/Linux 操作系统上拥有 2.2Ghz 四核处理器和 16GB RAM。当前脚本仅使用一个处理器。利用其他内核和 RAM 更快地处理图像的最佳方法是什么?启动多个 Python 进程来运行脚本是否会利用其他内核?
另一种选择是使用 Gearman 或 Beanstalk 之类的工具将工作分包给其他机器。我查看了多处理库,但不确定如何使用它。
【问题讨论】:
-
如果您已经有一个工作脚本可以指向您想要的任何文件/目录,请考虑编写一个 shell 脚本来根据需要启动尽可能多的实例。
-
我会先看看瓶颈在哪里。如果您将大部分时间花在执行 IO 上,那么您将无法走得更快。例如,如果单个进程设法以一定的速度从磁盘加载数据,那么当多个进程正在咀嚼磁盘时,您就不太可能保持该速度。
-
我真的同意 Jeff Forster 的观点,首先要寻找瓶颈。如果您对文件所做的唯一处理是读取元数据并存储它们,那么您的瓶颈很可能是磁盘访问。因此,尝试添加更多进程访问同一个磁盘只会降低性能。
标签: python optimization parallel-processing