感谢您所有的教学答案和使用python库; o)
答案 0 :(得分:10)
根据我的经验,多线程可能不会成为加快速度的可行选择(由于Global Interpreter Lock)。
一个很好的选择是multiprocessing
模块。这可能会或可能不会很好,取决于您最终必须从一个流程传递到另一个流程的数据量。
另一个好的选择是考虑使用numpy
进行计算(如果你还没有)。如果您可以对代码进行矢量化,那么即使在单核上,您也应该能够实现显着的加速。根据您正在进行的操作以及numpy
的构建,它甚至可以透明地将计算分布在多个核心上。
编辑以下是使用multiprocessing
模块执行简单计算的完整示例。它使用四个过程来计算从0到9的数字的平方。
from multiprocessing import Pool
def f(x):
return x*x
if __name__ == '__main__':
pool = Pool(processes=4) # start 4 worker processes
inputs = range(10)
result = pool.map(f, inputs)
print result
这是一个简单的例子。考虑到f()
的微不足道的性质,这个并行版本几乎肯定比连续计算相同的东西慢。
答案 1 :(得分:1)
在CPython中进行多核处理有点困难(感谢GIL)。但是,它们是multiprocessing模块,它允许使用子进程(而不是线程)来分割您在多个核心上的工作。
只要您的代码可以真正拆分为多个部分并且不依赖于共享对象,该模块就可以相对简单地使用。链接的文档应该是一个很好的起点。