Как отправить задачи в планировщик Python Dask из простой функции - PullRequest
0 голосов
/ 25 февраля 2020

Я хочу сделать что-то вроде этого:

client = Client()
def sub():
    client.submit(lambda: 'ok')

Вызов sub() не отправляет задачу. Звонок client.submit(lambda: 'ok') напрямую. Я не могу найти ничего в документах, описывающих это поведение. (Я использую Dask версии 1.1.4 и в настоящее время не могу выполнить обновление)

Ответы [ 2 ]

1 голос
/ 25 февраля 2020

В вашем исходном коде будущее, сгенерированное submit, не было сохранено в переменной, и после завершения вашей функции sub на нее не было ссылки. Поэтому Dask заметит, что ни один клиент больше не заинтересован в этом будущем, и он будет очищен из системы - возможно, он уже запущен, и память о результате будет освобождена.

Это ожидаемое поведение, и решение в вашем коде, какие фьючерсы имеют ссылки на них, является фундаментальной концепцией управления памятью в системе, см. https://distributed.dask.org/en/latest/memory.html#clearing -данные

Я подозреваю, что когда вы изначально вызывался submit, но не в функции, ваша реплика сохраняла ссылку на результат - если бы вы добавили ; в конец строки для подавления вывода, вы бы увидели то же поведение, что и вызов sub.

0 голосов
/ 25 февраля 2020

Задание было отправлено также, когда я выполнил sub(), но я не увидел, что это отражено в Dask GUI после обновления GUI. Вы можете убедиться, что это работает, если вы делаете

def sub():
    return client.submit(lambda: 'ok')

sub().result()
# 'ok'
...