как хранить рабочие локальные переменные в dask / распределенном

Используя dask 0.15.0, распространял 1.17.1.

Я хочу запомнить некоторые вещи для каждого работника, например, клиент для доступа к облачному хранилищу Google, потому что создание его экземпляра дорого. Я бы предпочел хранить это в каком-то атрибуте worker. Как это сделать канонически? Или использовать глобалы?


person Vincent Schut    schedule 10.07.2017    source источник


Ответы (2)


На рабочем

Вы можете получить доступ к локальному исполнителю с помощью функции get_worker. Немного чище, чем глобальные переменные, было бы прикрепить состояние к работнику:

from dask.distributed import get_worker

def my_function(...):
    worker = get_worker()
    worker.my_personal_state = ...

future = client.submit(my_function, ...)

Вероятно, нам следует добавить общую переменную пространства имен для рабочих, чтобы она служила общим местом для подобной информации, но пока этого не сделали.

As Globals

При этом, однако, для таких вещей, как подключение к глобальным службам внешних служб, не совсем зло. Многие системы, такие как Tornado, используют глобальные синглтоны.

Если вы заботитесь о безопасности потоков

Обратите внимание, что рабочие процессы часто бывают многопоточными. Если ваш объект подключения не является потокобезопасным, вам может потребоваться кэшировать другой объект для каждого потока. Для этого я рекомендую использовать объект threading.local. Даск использует один в

from distributed.worker import thread_state
person MRocklin    schedule 10.07.2017

Dask Actors

Для более простых случаев использования могут быть предпочтительны другие решения; Однако стоит подумать об актерах. Актеры в настоящее время являются экспериментальной функцией в Dask, которая позволяет выполнять вычисления с отслеживанием состояния.

Dask Actors

person mcguip    schedule 11.07.2019
comment
Еще не заметил - Спасибо! Вы знаете, можно ли также отправлять данные в Actors на высокой скорости? Как использовать Актера в качестве держателя данных для большего DataFrames или np.array? - person gies0r; 14.05.2020