Как запустить конвейер, кроме нескольких узлов?

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

3 ответа

Решение

Чтобы отфильтровать несколько строк конвейера, вы можете просто отфильтровать список конвейеров изнутри Python, мой любимый способ - использовать понимание списка.

по имени

nodes_to_run = [node for node in pipeline.nodes if 'dont_run_me' not in node.name]
run(nodes_to_run, io)

по тегу

nodes_to_run = [node for node in pipeline.nodes if 'dont_run_tag' not in node.tags]
run(nodes_to_run, io)

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

Если вам нужно запустить конвейер таким образом в производственной среде или из командной строки, вы можете либо пометить свой конвейер для запуска с помощью тегов, либо добавить настраиваемый click.option на ваш run функция внутри kedro_cli.py затем запустите этот фильтр, когда флаг True.

Примечание. Предполагается, что ваш конвейер загружен в память какpipeline и каталог загружен как io

Вы также можете использовать --to-nodes Вариант CLI: kedro run --to-nodes node1,node2. Внутренне это вызоветpipeline.to_nodes("node1", "node2")- метод docs. Обратите внимание, что вам все равно необходимо определить "окончательный" список узлов, которые необходимо запустить.

Помогут ли здесь модульные трубопроводы? Вы можете построить два конвейера, один из которых состоит только из двух "необязательных" узлов, а другой - без них, тогда вы можете вернуть конвейер по умолчанию, представляющий собой сумму этих двух. Что-то вроде этого:

def create_pipelines(**kwargs):
    two_node_pipeline = Pipeline(node(), node())
    rest_of_pipeline = Pipeline(node(), node(), node(), node())

    return {
        "rest_of_pipeline": rest_of_pipeline,
        "__default__": two_node_pipeline + rest_of_pipeline,
    }

Тогда ты можешь сделать kedro run --pipeline rest_of_pipeline запустить конвейер без этих двух узлов или kedro run для запуска конвейера с двумя дополнительными узлами.

В противном случае, я думаю, если вы измените свой kedro_cli или ProjectContext или run.py, что бы это ни было, его довольно легко добавить в --exceptфункциональность самостоятельно. Я мог бы заняться этим...

Kedro будет выполнять сортировку узлов автоматически, согласно toposort, см. Предыдущий ответ: Как запускать узлы в последовательности, как заявлено в конвейере kedro?

Другие вопросы по тегам