Открытие файлов в потоке параллельно с DASK + CFGrib происходит очень медленно

Я создавал инструмент для чтения файлов GRIB, используя следующий код. У меня разнородные файлы, поэтому я не могу использовать xarray.open_mfdatasets или что-то в этом роде.

def create_open_delays(file_list: List[str],expected_dataset_count:int) -> List[Delayed]:
    """
    This function runs through list of files and creates a
    list of delayed open commands.
    """
    return [
        dask.delayed(cfgrib.open_datasets,nout=expected_dataset_count)(file,
                                           backend_kwargs={
                                               "indexpath": ""
                                           },
                                           cache=True) for file in file_list
    ]

Во время выполнения кода я заметил, что при параллельном выполнении потоков производительность снизилась в 10 раз по сравнению с полностью параллельным процессом (каждый рабочий Dask имеет только 1 поток). Я предполагаю, что это связано с GIL, и я не думаю, что это никого удивит. В документации DASK это подчеркивается как возможность оптимизации. Наличие такого количества воркеров имеет некоторые недостатки, так как теперь у них ограничена память, а запуск всех воркеров требует дополнительных затрат, не говоря уже о большем взаимодействии процессов. Каждая задача занимает примерно 10 секунд, поэтому меня не беспокоит чрезмерная работа Dask.delayed.

У меня два вопроса:

  1. Можно ли что-нибудь сделать в базовых пакетах CFGrib/Eccodes, что может улучшить многопоточность? Насколько я понимаю, numpy и т. Д. Предпринимает шаги в базовом скомпилированном коде для выпуска GIL?
  2. Можно ли использовать новую функциональность asyncIO python в DASK? (Я не требую от кого-либо просто разработать это мгновенно, мне просто интересно узнать, существует ли что-то подобное или в разработке, является ли это глупой идеей)

Благодарю.

1 ответ

Если вы еще этого не видели, рекомендую взглянуть на Xarray, по крайней мере, чтобы увидеть, как они справляются с Грибом.

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