Python程序的脏并行化

Python程序的脏并行化,python,numpy,scipy,scikit-image,Python,Numpy,Scipy,Scikit Image,我有一个程序,在一个循环中加载2600个图像,进行一些处理并返回一个值。伪代码: for file in files: codes[file] = my_function(file) return codes 问题是-这个过程大约需要20-30分钟,而且似乎只使用一个CPU核心。我正在寻找一种快速而肮脏的方法来在更多的内核中运行它,也许可以将列表一分为二。我读过很多关于Python及其问题/解决方案的书,但我不知道下一步该怎么做。我该怎么做 仅供参考,在2009年Macbook Pro(C

我有一个程序,在一个循环中加载2600个图像,进行一些处理并返回一个值。伪代码:

for file in files:
  codes[file] = my_function(file)
return codes
问题是-这个过程大约需要20-30分钟,而且似乎只使用一个CPU核心。我正在寻找一种快速而肮脏的方法来在更多的内核中运行它,也许可以将列表一分为二。我读过很多关于Python及其问题/解决方案的书,但我不知道下一步该怎么做。我该怎么做


仅供参考,在2009年Macbook Pro(Core 2 Duo)上使用Python 2.7,带有Numpy Scipy Scikit image和OpenCV。

最简单的方法是使用
多处理

from multiprocessing import Pool

with Pool() as p:
    all_codes = p.map(my_function, files)
return {f:code for code, f in zip(all_codes, files)}

如果完全独立地处理所有图像,则创建两个脚本,两个脚本都处理一组1300个图像。一个接一个地启动脚本,然后在每个核心上运行一个python解释器。(但是Patrick的解决方案是+1,这确实是一个干净的解决方案。)我们将在下一个版本的scikit image用户指南中编写此解决方案。如果您想让它真正脏,请在Bashi Patrick中并行化!非常感谢,这看起来很棒!两个问题-你能解释一下最后一行吗?2我是否需要显式调用p.start()来启动它?最后一行是一个字典理解,它以你在问题中使用的相同格式返回内容(使用文件句柄作为键)。无需调用
p.start()
——使用
p.map
可以让Python在进程完成任务时智能地将工作分块给进程。这产生了超过100%的加速。谢谢!:)一个简单的问题,您的代码没有按预期工作(AttributeError在第行);我这样做了:p=Pool()所有的_代码=p.map(我的_函数,项)它们是等价的还是我遗漏了什么?你也有
import
行吗?范围中有一个名为
项的东西