[这是我的第一篇文章,我希望我没有完全误解 SE 的使用 - 如果是这样,我提前道歉]
我同意“bgschaid”的观点,即根据所提供的信息很难回答这个问题。如果您希望低级例程利用多核架构,或者如果您需要利用并行性来解决令人尴尬的并行问题 - 或介于两者之间的问题,这会产生巨大的差异。可以在此处找到 Python 中不同并行计算可能性的概述。
在前一种情况下,我肯定建议使用NumPy / SciPy等工具,至少在 Enthought 的 MKL 编译版本中,它们支持多核架构。在这里,您可以通过环境变量“MKL_NUM_THREADS”控制要使用的内核数量。这依赖于高度优化的库,我们几乎不能指望在性能方面超越这些库。我相信通常建议尽可能使用这些高质量和高度优化的库。
如果您希望在粗略的水平上利用并行性,Python 标准工具multiprocessing很容易使用 - 它还支持共享数据对象。有不同的工具可用作多处理包的一部分。我已经使用map_async (SIMD like) 和apply_async (MIMD like) 来解决几个问题,效果很好。multiprocessing包非常易于使用,并且作为 Python的标准部分意味着您可以期望您的代码的其他潜在用户能够轻松使用它。 多处理也直接链接到 NumPy 数据对象。使用多处理时我建议您将环境变量“MKL_NUM_THREADS”设置为 1,这样NumPy只允许每个进程/工作人员使用一个内核 - 否则您可能最终会导致 NumPy 并行和多处理之间的资源争用,从而导致性能下降。 多处理适用于同一操作系统下的多 CPU/多核架构。我在具有 4 个 Xeon E7-4850 CPU(每个 10 个内核)和 512 GB 内存的共享内存计算机上使用了多处理,它运行得非常好。共享数组可以由multiprocessing.Array或sharedctypes处理。您可以在此处找到 Python 文档- 检查库.pdf文件。我有一些幻灯片解释了其中的一些基本部分——如果你想要这些,请 PM 我。
如果您有分布式内存的集群配置,我相信mpi4py可能是首选工具。我自己没有使用过它,但我知道它在 Python 并行编程中被大量使用。