Воздушный поток: пропустить строку перед оператором битового сдвига

Можно ли разорвать строки между оператором bitfshift при настройке зависимостей задач в DAG?

В моем DAG 10 задач, и все они должны выполняться последовательно, без распараллеливания.

Я хотел бы связать их в своем коде вертикально, как показано ниже:

   task_1 \
>> task_2 \
>> task_3 \
>> task_n \

Вместо горизонтального:

task_1 >> task_2 >> task_3 >> task_n

Я пробовал символ \, но безуспешно.

Спасибо


person Heder Dyego    schedule 13.05.2020    source источник
comment
Есть ли у вас пробелы после обратной косой черты?   -  person Gertjan Brouwer    schedule 14.05.2020
comment
После backslash нет пробелов. Только что проверил здесь   -  person Heder Dyego    schedule 14.05.2020
comment
Вы пробовали скобки?   -  person Gertjan Brouwer    schedule 14.05.2020
comment
Просто попробовал parenthesis, и это сработало! Спасибо @GertjanBrouwer   -  person Heder Dyego    schedule 14.05.2020
comment
Проверьте мой ответ: stackoverflow.com/a/61786368/5691525 :) Вы можете просто использовать список, содержащий все задачи и chain их   -  person kaxil    schedule 14.05.2020


Ответы (2)


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

foo = (task_1 >> task_2 >> task_3 >> task_n)

PEP8 на максимальной длине строки говорит:

Предпочтительный способ обертывания длинных строк - использование подразумеваемого продолжения строки Python внутри скобок, скобок и фигурных скобок. Длинные строки можно разбить на несколько строк, заключив выражения в круглые скобки. Их следует использовать вместо использования обратной косой черты для продолжения строки.

При разрыве строки имейте в виду, что ваш бинарный оператор (в данном случае >>) всегда ставится на новую строку перед положением. Это делает его более читаемым, например.

foo = variable1 +
      variableThatIsVeryLong -
      var *
      varAverage

vs.

foo = variable1
      + variableThatIsVeryLong
      - var
      * varAverage

Таким образом, читателю сразу становится понятно, какой оператор используется.

Одна из возможных причин, по которой обратная косая черта не работает, может быть из-за пробела сразу после нее.

person Gertjan Brouwer    schedule 13.05.2020
comment
Спасибо за ссылку PEP8. Я не знал, что могу решить эту проблему, используя любой из трех вариантов, упомянутых в документации. Мой результирующий код выглядит так (ему также не нужно было присваивать): ( task_1 >> task_2 >> task_3 >> task_n ) - person Heder Dyego; 14.05.2020
comment
Отлично, рад, что смог помочь. Удачи! - person Gertjan Brouwer; 14.05.2020

Вы можете использовать функцию цепочки из airflow.utils.helpers, чтобы связать линейные зависимости.

Пример:

from airflow.utils.helpers import chain

tasks = [op1, op2, op3, op4, op5]
chain(*tasks)

эквивалентно:

op1 >> op2 >> op3 >> op4 >> op5

Подробности: https://airflow.apache.org/docs/stable/concepts.html#relationship-builders

person kaxil    schedule 13.05.2020
comment
chain кажется решением, которое я искал с самого начала. Я использовал его для цепочки динамически генерируемых task_ids, которые добавляются в список. Тем не менее, chain выдает ошибку в пользовательском интерфейсе Airflow: Chain not supported different length Iterable but get 55 and 63 Я пытаюсь понять, как решить эту проблему сейчас - person Heder Dyego; 14.05.2020