如何在 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
我用 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