Как запустить конвейер, кроме нескольких узлов?
Я хочу запустить конвейер для разных файлов, но некоторым из них не нужны все определенные узлы. Как я могу их передать?
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?