Dask Distributed Получение фьючерсов после закрытия клиента

Есть ли способ предотвратить dask / distribution от отмены очереди и выполнения фьючерсов при закрытии клиента?

Я хочу использовать блокнот jupyter, чтобы запустить несколько очень длительных симуляций с распределенным, закрыть блокнот и когда-нибудь позже получить результаты.


person sheridp    schedule 14.03.2018    source источник


Ответы (1)


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

>>> client.publish_dataset(mydata=f)

Здесь f - будущее, список фьючерсов или набор dask (фрейм данных и т. Д.).

В другом сеансе:

>>> client.list_datasets()
['mydata']
>>> client.get_dataset('mydata')
<same thing as f>

Альтернативный и, возможно, более простой синтаксис выглядит как

>>> client.datasets['mydata'] = f

>>> list(client.datasets)
['mydata']
>>> client.datasets['mydata']
<same thing as f>

Чтобы удалить ссылки и разрешить очистку данных из кластера (если они не нужны клиенту), используйте client.unpublish_dataset('mydata') или del client.datasets['mydata'].

person mdurant    schedule 14.03.2018
comment
Привет, mdurant, спасибо за ответ. Я пробовал этот метод, но обнаружил, что даже с опубликованным набором данных, если вызывается client.close, будущее все равно отменяется, даже если оно было опубликовано. - person sheridp; 15.03.2018
comment
Я ошибался! Исходное будущее (возвращаемое client.submit) действительно отменено, но похоже, что client.get_dataset возвращает другое будущее, которое все еще ожидает выполнения, пока операция продолжается. Спасибо за предложение, это заставило меня пересмотреть свои предположения; Скорее всего, я собирался отказаться от dask / distribution в пользу сельдерея для своего приложения. - person sheridp; 15.03.2018
comment
Рад, что вам не нужно отказываться от dask! - person mdurant; 15.03.2018