我即将编写一些计算密集型的Python代码,几乎肯定会将大部分时间花在numpy
的线性代数函数中。
手头的问题是embarrassingly parallel。简而言之,对我来说最简单的方法就是使用多线程。主要障碍几乎肯定是全球翻译锁(GIL)。
为了帮助设计这个,有一个心理模型是有用的,可以期望numpy
操作在其持续时间内释放GIL。为此,我会欣赏任何经验法则,注意事项,注意事项等。
如果重要,我在Linux上使用64位Python 2.7.1,numpy
1.5.1和scipy
0.9.0rc2,使用英特尔MKL 10.3.1构建。< / p>
答案 0 :(得分:7)
您可能会在the official wiki找到有关NumPy和并行编程的所有问题的答案。
另外,看看this recipe page - 它包含有关如何将NumPy用于多个线程的示例代码。
答案 1 :(得分:4)
答案 2 :(得分:1)
相当多的numpy例程释放GIL,因此它们可以在线程中有效并行(info)。也许你不需要做任何特别的事情!
您可以使用this question来查找您需要的例程是否是释放GIL的例程。简而言之,在源代码中搜索ALLOW_THREADS
或nogil
。
(另请注意,MKL能够为例程使用多个线程,因此这是获得并行性的另一种简单方法,尽管可能不是最快的类型)。