轻松多线程¶
日期 | 2008-03-22(最后修改),2007-04-18(创建) |
---|
Python 包含一个多线程包“threading”,但 Python 的多线程受到全局解释器锁的严重限制,该锁一次只允许一个线程与解释器交互。对于纯解释代码,这使得多线程实际上是协作的,无法利用多核优势。
然而,numpy 代码在计算时通常会释放 GIL,因此简单的并行化可以加速代码。对于复杂的应用程序,应该考虑使用 MPI 或直接使用线程,但令人惊讶的是,应用程序通常是“尴尬并行”的,也就是说,只需要对许多对象执行相同的操作,并且迭代之间没有交互。这种计算可以轻松地并行化。
在 [ ]
dft = parallel_map(lambda f: sum(exp(2.j*pi*f*times)), frequencies)
实现 parallel_map 的代码并不复杂,并附在该条目中。如果不想返回值,则更简单。
在 [ ]
def compute(n):
...do something...
foreach(compute, range(100))
这将替换 for 循环。
有关代码(由 AMArchibald 编写)的附件,请参见 [[AttachList]]。
另请参见 ParallelProgramming 以获取替代方案和更多讨论。
章节作者:AMArchibald、DavidLinke
附件