2024-05-16 11:54:57 发布
网友
感谢您提供的所有教学解答和使用python库;o)
在CPython中,多核处理有点困难(多亏了GIL)。但是,它们是multiprocessing模块,它允许使用子进程(而不是线程)来拆分多个核心上的工作。
只要您的代码可以真正分成多个部分,并且不依赖于共享对象,那么该模块就可以相对直接地使用。链接的文档应该是一个很好的起点。
根据我的经验,多线程可能不是一个加快速度的可行选择(由于Global Interpreter Lock)。
一个好的替代方案是^{}模块。这可能有效,也可能无效,这取决于您最终必须将多少数据从一个进程传递到另一个进程。
另一个好的选择是考虑使用^{}进行计算(如果还没有)。如果你能将你的代码矢量化,你应该能够在一个核心上实现显著的加速。它甚至可以透明地将计算分布在多个核心上,这取决于您具体在做什么,取决于您构建的numpy。
numpy
编辑下面是使用multiprocessing模块执行简单计算的完整示例。它使用四个过程来计算从0到9的数字的平方。
multiprocessing
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()的琐碎特性,这个并行版本几乎肯定比串行计算相同的东西慢。
f()
在CPython中,多核处理有点困难(多亏了GIL)。但是,它们是multiprocessing模块,它允许使用子进程(而不是线程)来拆分多个核心上的工作。
只要您的代码可以真正分成多个部分,并且不依赖于共享对象,那么该模块就可以相对直接地使用。链接的文档应该是一个很好的起点。
根据我的经验,多线程可能不是一个加快速度的可行选择(由于Global Interpreter Lock)。
一个好的替代方案是^{} 模块。这可能有效,也可能无效,这取决于您最终必须将多少数据从一个进程传递到另一个进程。
另一个好的选择是考虑使用^{} 进行计算(如果还没有)。如果你能将你的代码矢量化,你应该能够在一个核心上实现显著的加速。它甚至可以透明地将计算分布在多个核心上,这取决于您具体在做什么,取决于您构建的
numpy
。编辑下面是使用
multiprocessing
模块执行简单计算的完整示例。它使用四个过程来计算从0到9的数字的平方。这是一个简单的说明。考虑到
f()
的琐碎特性,这个并行版本几乎肯定比串行计算相同的东西慢。相关问题 更多 >
编程相关推荐