На рабочем
Вы можете получить доступ к локальному исполнителю с помощью функции 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