如何在Python中轻松实现并行循环?

3
我是一名C++程序员,热衷于并行计算和高性能计算应用,并且我很了解OpenMP。现在我正在学习Python,并掌握了基础知识。
作为提高Python技能的个人项目,我想实现Elkan k-means算法的并行版本。这个算法的C语言和OpenMP并行版本已经在VLFeat中实现
现在,我知道如何轻松地在Python中实现Elkan算法...但是并行呢?OpenMP的好处在于,你可以将串行代码添加#pragma omp parallel for,然后就可以并行运行了!
我该如何在Python中实现类似的功能?或者我必须从头设计并行算法,即不先编写串行版本,然后再将其转换为并行版本,而是要显式地管理线程等(这非常痛苦)?

3
请注意:如果针对CPU密集型应用程序,Python中的多线程是无用的(甚至具有反生产力)。你需要使用多进程代替。感谢GIL先生。这里有一个很好的参考文献链接 - Right leg
这里可能有一些有用的参考资料:NumPy/SciPy中的并行和分布式编程 - jdehesa
1个回答

0

首先,在Python中获得CPU并行性只能通过本地代码或多个进程来实现。

其次,类似于OpenMP的模块是multiprocessing模块。

它有很多功能,但对于简单的for循环等,使用起来非常容易。

results = map(operation, things)

会变成

import multiprocessing
pool = multiprocessing.Pool()
results = pool.map(operation, things)

所以你是告诉我,在Python中实现并行不是通过多线程,而是仅通过分配多个进程来实现的?哇,听起来有点过度了吧! - justHelloWorld
与C++中的线程相比,Python中的线程由于全局解释器锁(Global Interpreter Lock)而非常有限。 - shanmuga
@justHelloWorld,进程与线程本身的开销并不一定有很大的区别,这取决于程序。Python、MRI Ruby和Javascript都使用多进程范式。它并非没有优势。如果你对C++并行性感兴趣,你可能听说过/使用过MPI - Paul Draper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接