Читать параметры файла pygrib параллельно

Я имею дело с довольно большими метеорологическими файлами, содержащими более 50000 сообщений в каждом. Есть информация о многих параметрах (температура, геопотенциал, вихревость и т. Д.), И мне нужно получить к ней доступ. Я использую пигриб, чтобы читать их.

я открываю файл, затем читаю каждый параметр, используя функцию "select" в pygrib. Проблема в том, что функция выбора очень медленная. Я думал о распараллеливании чтения каждого параметра, читая порции сообщений (что я не знаю, как это сделать), но я думаю, что может быть проще читать каждый параметр параллельно (т.е. отправлять функцию выбора для каждого параметра в процессор и записать вывод в массив).

Мой код такой:

import pygrib as pg

grb = pg.open(file_name.grib)
temperature = grb.select(name='Temperature')
geop_height = grb.select(name='Geopotential')

Я хотел бы отправить каждую команду grb.select в один процессор, чтобы ускорить процесс. Является ли это возможным? Я читал о многопроцессорном пакете, но я не знаю, как его использовать здесь (я видел несколько примеров, например, ответ 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 (т. Е. Разделить задачу выбора всех сообщений о температуре, например, на множество процессоров)?

У меня есть доступ к машине с 64 процессорами, и это очень поможет.

Заранее спасибо!

0 ответов

Другие вопросы по тегам