Я пытаюсь понять, почему вам просто нужно написать конкретную переменную в конце оператора with
?
from datetime import datetime, timedelta
from airflow import DAG
from airflow.operators.bash import BashOperator
default_args = {
'owner': 'coder2j',
'retries': 5,
'retry_delay': timedelta(minutes=5)
}
with DAG(
default_args=default_args,
dag_id = "dag_with_cron_expression_v04",
start_date=datetime(2021, 11, 1),
schedule_interval='0 3 * * Tue-Fri'
) as dag:
task1 = BashOperator(
task_id='task1',
bash_command = "echo dag with cron expression!"
)
task1 # What does this mean ?
Этот пример взят из здесь.
Зачем просто оставлять переменную task1
в конце?
В качестве выражения-выражения единственное, что это делает, — это выполняет поиск по имени, единственным возможным побочным эффектом которого является NameError
, чего явно не произойдет. Основываясь на других примерах в репозитории, я бы сказал, что это был артефакт копирования и вставки, который не был очищен, или неполный пример, в котором ожидаемый task2
так и не был добавлен.
@chepner Как ни странно, автор тоже это делает в видео на ютубе, из которого объясняет другой пример: youtu.be/K9AnJ9_ZAXE?t=2024
Единственное, что я могу предположить, так это то, что это стилистическое соглашение, обеспечивающее единообразие примеров. (Каждый оператор with
определяет одну или несколько задач, а затем объединяет их. Если есть только одна задача, тривиальная комбинация все равно вводится.) (Я не думаю, что что-то делает странные inspect
трюки, ожидающие появления такой тривиальной комбинации в приказать, чтобы что-то произошло.)
(Или, не просматривая оставшуюся часть видео, это просто ожидание добавления второй задачи позже.)
Возможно, код был запущен в IDLE, и в этом случае задача 1 в конце имеет значение, т. е. она будет (неявно) напечатана.
Это может быть стилистически. Я обнаружил, что многие авторы Airflow сначала создают все задачи, а затем во второй части сценария устанавливают task1 >> task2
зависимости всех задач. Здесь это показывает, что задача одна, ни от чего не зависит. Я предпочитаю BashOperator() >> BashOperator
делать это онлайн, когда это возможно.
Вы правы, для этого нет никаких оснований. Также переменную Task1 с присвоением можно было просто удалить. Только:
with DAG(
default_args=default_args,
dag_id = "dag_with_cron_expression_v04",
start_date=datetime(2021, 11, 1),
schedule_interval='0 3 * * Tue-Fri'
) as dag:
BashOperator(
task_id='task1',
bash_command = "echo dag with cron expression!"
)
Спросите автора. Причин нет, и переменную
task1
с присвоением можно было просто удалить.