1

我正在处理相当大的气象 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 机器,这将有很大帮助。

先感谢您!

4

0 回答 0