如何在OBSPY流上应用多处理?

时间:2018-06-06 10:25:21

标签: python python-multiprocessing

我用OBSPY导入的文件有207条跟踪形成一条流,每条跟踪有30k个样本。来自每个轨迹的数据由seismic_data [trace_number] .data访问,并且是一维的ndarray。

我正在使用一个带跟踪和int作为参数的函数: kurt_1d(signal_1d,样本)。它返回一个相同大小的1-d数组。

目前我在207轨迹上使用for循环来在每条轨迹上运行该函数:

def kurt_nd(signal_nd, samples):

    kurt_array = signal_nd.copy()
    for index in range(207):
       kurt_array[index].data = kurt_1d(signal_1d=signal_nd[index].data,samples=samples)
    return(kurt_array)

如何使用多处理技术在整个流(207轨迹)上应用此函数kurt_1d(signal_1d,samples)来提高速度?目标是将每个生成的1-D ndarray存储在原始流副本的相应索引中。

1 个答案:

答案 0 :(得分:0)

您可以定义一个进程池来运行该功能。 示例代码如下:

import multiprocessing as mp
import os

num_proc = os.cpu_count() # to get the number of cores on your computer

pool = mp.Pool(processes=num_proc)
proc = [pool.appy_async(kurt_nd,args=[i,samples]) for i in traces] # map the function to the processes
results = [p.get() for p in proc] # retrieve the results from your processes