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

How to apply multiprocessing on OBSPY stream?

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

我正在使用一个将 trace 和 int 作为参数的函数: kurt_1d(signal_1d,样本)。它 returns 一个相同大小的一维数组。

目前我在 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)

如何使用多处理将此函数 kurt_1d(signal_1d, 样本) 应用于整个流(207 条轨迹)以提高速度?目标是将每个生成的一维 ndarray 存储在原始流副本的各自索引中。

您可以为 运行 函数定义一个进程池。 示例代码如下:

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