Предварительное рассеяние разработано, чтобы избежать размещения больших данных объекта в графе задач.
x = np.array(lots_of_data)
a = client.submit(add, x, 1) # have to send all of x to the scheduler
b = client.submit(add, x, 2) # again
c = client.submit(add, x, 3) # and again
Вы почувствуете эту боль, потому что client.submit
будет медленно возвращаться, и Dask может даже выдать предупреждение.
Поэтому вместо этого мы разбрасываем наши данные, получая будущее вreturn
x = np.array(lots_of_data)
x_future = client.scatter(x)
a = client.submit(add, x_future, 1) # Only have to send the future/pointer
b = client.submit(add, x_future, 2) # so this is fast
c = client.submit(add, x_future, 3) # and this
В вашей ситуации вы почти делаете это, с той лишь разницей, что вы разбрасываете свои данные, затем забываете о будущем, которое они возвращают, и отправляете ваши данные снова.
client.scatter(data, broadcast=True) # whoops! forgot to capture the output
data = client.scatter(data, broadcast=True) # data is now a future pointing to its remote value
Вы можете выбрать broadcast
или нет.Если вы знаете, что все ваши работники будут нуждаться в этих данных, то это не плохая вещь, но все будет хорошо, независимо от того.