Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多处理嵌套python循环_Python_Multithreading_Numpy_Multiprocessing - Fatal编程技术网

多处理嵌套python循环

多处理嵌套python循环,python,multithreading,numpy,multiprocessing,Python,Multithreading,Numpy,Multiprocessing,为了改进我的代码,它有一个沉重的循环,我需要一个加速。如何为这样的代码实现多处理?(a为典型尺寸2,l为10) 如果HeavyComputationThatThreadSafe1函数只使用数组而不使用python对象,我将使用(或)ThreadPoolExecutor以及(或)释放GIL。否则,请使用ProcessPoolExecutor 见: 您可能希望在最外层循环的级别上并行计算,然后从每个线程/进程产生的块中填充output。这是假设这样做的成本比计算要便宜得多,这应该是事实。Shado

为了改进我的代码,它有一个沉重的循环,我需要一个加速。如何为这样的代码实现多处理?(a为典型尺寸2,l为10)


如果
HeavyComputationThatThreadSafe1
函数只使用数组而不使用python对象,我将使用(或)
ThreadPoolExecutor
以及(或)释放GIL。否则,请使用
ProcessPoolExecutor

见:


您可能希望在最外层循环的级别上并行计算,然后从每个线程/进程产生的块中填充
output
。这是假设这样做的成本比计算要便宜得多,这应该是事实。

ShadowRanger对这个问题的评论仍然站得住脚——如果你致力于调用线程安全1的
Heavycomputation超过10亿次,世界上所有的线程都不会有太大的影响。对ThreadSafe1的
HeavyComputations的单个调用需要多少秒?取这个数字,乘以1073741824,再除以你拥有的核数。这为您提供了使用多处理可以实现的绝对最佳场景运行时。我使用您链接到的
iisthreadsafe
重计算解决了性能问题。即使使用您提到的数据大小,如果使用一些合理的优化集,也只需要大约8GB的内存和45秒就可以遍历所有三个嵌套循环。
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)