while True:
Number = len(SomeList)
OtherList = array([None]*Number)
for i in xrange(Number):
OtherList[i] = (Numpy Array Calculation only using i_th element of arrays, Array_1, Array_2, and Array_3.)
'Other'可以单独计算OtherList和其他数组中的元素数。 但是,由于该程序是时间相关的,我们无法继续进一步的工作,直到每个“数量”数量的元素被处理。
多处理是否可以成为此操作的良好解决方案? 我应该最大限度地加快这个过程。 如果更好,请建议代码。
答案 0 :(得分:4)
It is possible to use numpy arrays with multiprocessing但你不应该这样做。
阅读A beginners guide to using Python for performance computing及其Cython version: Speeding up Python (NumPy, Cython, and Weave)。
在不知道阵列的具体计算或大小的情况下,这里的通用指南没有特别的顺序:
O(n)
O(n**2)
算法比C中的n
算法更快
cython.parallel.prange()
。发布GIL。答案 1 :(得分:0)
由于你有一个while True
子句,我假设你会在迭代时运行很多,所以潜在的收益最终将超过多处理池产生的减速。我还假设您的计算机上有多个逻辑核心,原因很明显。然后问题就变成了序列化输入和反序列化结果的成本是否被增益抵消了。
根据我的经验,最好的方法是知道是否有任何可以获得的东西是尝试一下。我建议:
Array_1, Array_2, and Array_3
中的任何一个永远不会更改,请在调用args
时将其作为Process()
传递。这样就减少了需要通过IPC选择和传递的数据量(这是multiprocessing
所做的)