Поведение dask client.submit - PullRequest
       7

Поведение dask client.submit

0 голосов
/ 26 октября 2018

В следующем примере:

from random import random
def add_random(x):
    return x + random()

results = []
for i in range(200):
    results.append(client.submit(add_random, 2))
results[0]

Я заметил, что все фьючерсы в результатах имеют тот же ключ, что и results[0]. Следовательно, все отдельные result s в results имеют одинаковые значения.

С другой стороны, если я сделаю каждый вызов функции уникальным:

def addone(x, i):
    return x + 1

results = []
for i in range(200):
    results.append(client.submit(addone, 2, i))
results[0]

Каждое будущее имеет уникальный ключ, и все result в списке results являются уникальными.

Это ожидаемое поведение? Сначала я предполагал, что в первом случае я должен получить результат, который я получил во втором случае.

1 Ответ

0 голосов
/ 26 октября 2018

По умолчанию Dask предполагает, что все переданные ему функции являются детерминированными, то есть при одинаковых входных данных они дают одинаковые выходные данные.Это помогает нам дедуплицировать работу.

В случае вашей функции это не так, она возвращает другое значение при тех же входных данных из-за вызова random().Вы можете переопределить детерминированное поведение, указав аргумент ключевого слова pure=False для отправки.

future = client.submit(func, x, pure=False)
...