Похоже, клиентский метод register_worker_callbacks может делать то, что вы хотите в этом случае.Вам все еще понадобится где-то , чтобы поместить вашу переменную, поскольку в python нет действительно глобальной области видимости.Например, где-то может быть любой атрибут импортируемого модуля, к которому любой работник будет иметь доступ.Вы также можете добавить его в качестве атрибута самого рабочего экземпляра, но я не вижу очевидной причины хотеть сделать это.
Один способ, который работает, перехват случайным образом выбранного встроенного модуля;но я не особо рекомендую это (см. ниже)
def attach_var(name, value):
import re
re.__setattr__(name, value)
client.run(attach_var, 'x', 1)
def use_var():
# any function running on a worker can do this, via delayed or
# whatever method you pass with
import re
return re.x
client.run(use_var)
Прежде чем идти вперед, вы уже рассмотрели delayed(calib_data)
или scatter
, который скопирует вашу переменную туда, где она необходима, например,
futures = client.scatter(calib_data, broadcast=True)
или даже загрузку данных в рабочих с использованием обычной delayed
семантики
dcalib = dask.delayed(load_calib_data)()
work = dask.delayed(process_stuff)(dataset1, dcalib)