【发布时间】:2016-02-08 19:30:57
【问题描述】:
我已经看到了很多关于使用 python 的multiprocessing 的问题,但我一直无法完全理解如何在我的代码中使用它。
假设我有一个 NxM 数组。我有一个函数 f 将 (i,j) 处的值与其他每个像素进行比较。因此,本质上,我计算网格上每个点的 NxM 值。
我的机器有四个核心。我设想我会将输入位置分成四个象限,然后将每个象限提供给不同的进程。
所以,从原理上讲,我当前的代码是:
def f(x, array):
"""
For input location x, do some operation
with every other array value. As a simple example,
this could be the product of array[x] with all other
array values
"""
return array[x]*array
if __name__ == '__main__':
array = some_array
for x in range(array.size):
returnval = f(x,array)
`
使用多处理优化此类问题的最佳策略是什么?
【问题讨论】:
-
您想如何存储答案?在另一个数组中?
-
如果您的问题是数学问题,您可能需要查看
numpy。尽管在 CPython 中被 GIL 绑定到单核性能,但 numpy 代码释放了它,因此您的代码使用线程 + numpy 比使用多处理更有效。 -
@bbayles 是的,它必须是另一个相同大小的数组,NxM。因此,保持订单很重要。
-
@myaut 你能详细说明一下 numpy 会如何帮助我吗?另外,据我了解,线程对 I/O 特别有用,而不是对繁重的计算有用吗?谢谢!
-
@John:检查这个答案:stackoverflow.com/questions/6200437/…
标签: python arrays parallel-processing