Как перебирать коллекции в графе задач Dask - PullRequest
0 голосов
/ 10 октября 2019

У меня есть следующий график задач.

def getdocs():
    return [doc1,doc2]

def tosents(doc):
    return doc.split(".")  # Except doc is a list of docs

def towords(sent):
    return sent.split(" ")  

graph = {
    "documents": (getdocs,),
    "sentences": (tosents,"documents"),
    "words": (towords, "sentences")
}

Каждая задача возвращает список, но я хочу, чтобы эти результаты были распараллелены получающей функции, которая должна принимать только одно значение (например, строку),В настоящее время результаты передаются.

Как я могу указать, что результаты должны быть перечислены по функции-получателю? Используя yield?

Спасибо заранее.

1 Ответ

0 голосов
/ 10 октября 2019

Для людей необычно создавать свои собственные графики Даска, поскольку интерфейс delayed очень прост в использовании. Если у вас есть функция, которая возвращает известное количество выходов, которые вы хотите обработать отдельно (т.е. работать параллельно), вы можете сделать что-то вроде

ddocs = delayed(getdocs, nout=2)
sentences = [delayed(tosentences)(doc) for doc in ddocs()]

, где tosentences принимает один документ в качестве ввода,Каждый элемент sentences будет отложенным объектом с собственным графиком. Вы можете вычислить их параллельно, если передадите их вместе в compute().

-edit-

ddocs;Вы не можете перебрать отложенную функцию, но вы можете перебрать отложенные объекты, которые она создает.

...