我正在处理相当大的气象 grib 文件,每个文件包含超过 50000 条消息。有许多参数(温度、位势、涡度等)的信息,我需要访问它。我使用 pygrib 来阅读它们。
我所做的是打开文件,然后使用 pygrib 的“选择”功能读取每个参数。问题是选择功能非常慢。我考虑通过读取消息块(我不知道该怎么做)来并行读取每个参数,但我认为并行读取每个参数可能更简单(即将每个参数的选择函数发送到cpu 并将输出写入数组)。
我的代码是这样的:
import pygrib as pg
grb = pg.open(file_name.grib)
temperature = grb.select(name='Temperature')
geop_height = grb.select(name='Geopotential')
我想将每个 grb.select 命令发送到一个 CPU 中,以加快进程。可能吗?我阅读了关于多处理包的信息,但我不知道如何在这里使用它(我看到了一些例子,比如在这个Read large file in parallel? 中的答案 3 ,但我不知道如何推断我的情况)。
我的想法是:
import multiprocessing as mp
params = ['Temperature', 'Geopotential']
pool = mp.Pool(processes = len(params))
def readparam(grb_file, param):
return grb_file.select(name=param)
然后使用一些循环
pool.map(readparam, params)
得到结果。
此外,是否可以并行化单个 grb.select 命令(例如,将选择所有温度消息的任务划分为多个 CPU)?
我可以使用 64 CPU 机器,这将有很大帮助。
先感谢您!