Читать параметры файла 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 процессорами, и это очень поможет.
Заранее спасибо!