Как распараллелить al oop с Dask? - PullRequest
0 голосов
/ 14 апреля 2020

Я нахожу документацию Dask довольно запутанной. Допустим, у меня есть функция:

import random
import dask

def my_function(arg1, arg2, arg3):
    val = random.uniform(arg1, arg2) 
    va2 = random.uniform(arg2, arg3)
    return val1 + val2

some_list = []
for i in range(100):
    some_num = dask.delayed(my_function)(arg1, arg2, arg3)
    some_list += [some_num]

computed_list = dask.compute(*some_list)

Эта вещь потерпит неудачу из-за того, что my_function() не получит все 3 аргумента.

Как я могу распараллелить этот фрагмент кода в dask?


РЕДАКТИРОВАТЬ:

Кажется, работает, если вы помещаете @dask.delayed декоратор поверх функции def и вызываете его как обычно, но теперь строка метода .compute() выдает:

KilledWorker: ('my_function-ac3c88f1-53f8-4d36-a520-ff8c40c6ee61', <Worker 'tcp://127.0.0.1:35925', name: 1, memory: 0, processing: 10>)

1 Ответ

0 голосов
/ 15 апреля 2020

Сначала я строю график, а затем вызываю на нем вычисления:

import random
import dask

@dask.delayed
def my_function(arg1, arg2, arg3):
    val1 = random.uniform(arg1, arg2) 
    val2 = random.uniform(arg2, arg3)
    return val1 + val2

arg1 = 1
arg2 = 2
arg3 = 3

some_list = []
for i in range(10):
    some_num = my_function(arg1, arg2, arg3)
    some_list.append(some_num)

graph = dask.delayed()(some_list)
# graph.visualize()
computed_list = graph.compute()
...