我对python中的并行处理没有太多经验。我有一个脚本,它接收几个 fit 文件,这些文件基本上是图像,将它们读入 3D numpy 数组并对其进行一些计算。我猜“最糟糕”的部分是,我有 2 个 for 循环,遍历数组的两个维度。在循环内部,我基本上得到一个列表,其中包含给定 x 和 y 坐标处的 numpy 数组的第三维。然后我计算最大值,以及最大值所在的索引。然后我将结果写入两个新的二维数组中,它们的 x 和 y 坐标相同。
对于尺寸约为 6000x6000x20 的 fit 文件,这可能需要几分钟才能完成。然后我尝试让这个并行运行,因为每个 2D 视线都是相互独立的,因此可以在单独的过程中计算。
我查看了一些调用多处理的基本教程,但是每次尝试它都需要 10 倍的时间……我在这里读过一些问题,多处理可能会有很多开销。开销所需的处理时间是否可能比过程中的实际计算长得多,这就是它比原来慢得多的原因吗?
谢谢。
这是我放在一起的示例脚本。
import numpy,time
import multiprocessing as mp
xs = 500
data = numpy.random.rand(100,xs,xs)
data2 = numpy.zeros(shape=(xs,xs))
def calculation(los):
maxindex = numpy.argmax(los)
return maxindex
t0 = time.time()
for x in range(xs):
for y in range(xs):
los = data[:,x,y]
data2[x,y]=calculation(los)
t1 = time.time()
print t1-t0
t0 = time.time()
pool = mp.Pool(processes=4)
results = [pool.apply_async(calculation, args=(data[:,x,y],)) for x in range(xs) for y in range(xs)]
t1 = time.time()
print t1-t0
第一个版本大约需要 1 秒,第二个版本 12 在我的机器上需要几秒钟。