2024-10-04 01:25:39 发布
网友
为了改进我的代码有一个沉重的循环,我需要一个加速。我如何为这样的代码实现多处理?(a是典型的2号和l号至10号)
for x1 in range(a**l): for x2 in range(a**l): for x3 in range(a**l): output[x1,x2,x3] = HeavyComputationThatIsThreadSafe1(x1,x2,x3)
如果HeavyComputationThatIsThreadSafe1函数只使用数组而不使用python对象,我将使用一个concurrent futures(或python2 backport)ThreadPoolExecutor和{a3}(或cython)来发布GIL。否则使用ProcessPoolExecutor。在
HeavyComputationThatIsThreadSafe1
ThreadPoolExecutor
ProcessPoolExecutor
参见:
http://numba.pydata.org/numba-doc/latest/user/examples.html#multi-threading
您需要在最外层的循环级别并行计算,然后从每个线程/进程产生的块填充output。这假设这样做的成本比计算要便宜得多,这应该是事实。在
output
如果
HeavyComputationThatIsThreadSafe1
函数只使用数组而不使用python对象,我将使用一个concurrent futures(或python2 backport)ThreadPoolExecutor
和{a3}(或cython)来发布GIL。否则使用ProcessPoolExecutor
。在参见:
http://numba.pydata.org/numba-doc/latest/user/examples.html#multi-threading
您需要在最外层的循环级别并行计算,然后从每个线程/进程产生的块填充
output
。这假设这样做的成本比计算要便宜得多,这应该是事实。在相关问题 更多 >
编程相关推荐