1

气流版本2.1.0 / Python 版本3.6

你好。

我已经意识到,每当我尝试创建和安排 DAG 在一天中的特定时间运行时,时间戳值都会重置为 UTC。在 DAG 中导入后,我注意到default_argsdefault_args之间的奇怪行为

创建以下示例以重现该行为:

import pendulum
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from datetime import datetime, timedelta

local_tz=pendulum.timezone("America/Sao_Paulo")

default_args = {
     'owner': 'airflow',
     'start_date': datetime(2022, 2, 2, tzinfo=local_tz),
     'depends_on_past': False,
     'email': ['airflow@example.com'],
     'email_on_failure': False,
     'email_on_retry': False,
     'retries': 1,
     'retry_delay': timedelta(seconds=30)
}

dag = DAG(
     dag_id='dag-test',
     default_args=default_args,
     tags=['pdi', 'airflow', 'carte'],
     schedule_interval='0 15 * * *')

正如预期的那样,如果我打印default_args的内容,我们可以看到 tzinfo 正确设置为:Timezone('America/Sao_Paulo' )

print(default_args)
{'owner': 'airflow', 'start_date': datetime.datetime(2022, 2, 2, 0, 0, tzinfo=Timezone('America/Sao_Paulo')), 'depends_on_past': False, 'email': ['airflow@example.com'], 'email_on_failure': False, 'email_on_retry': False, 'retries': 1, 'retry_delay': datetime.timedelta(seconds=30)}

现在,由于某种原因,我无法弄清楚为什么,如果我们在 DAG 中打印 default_args,我们可以看到 tzinfo 变成tzinfo=Timezone('UTC')即使它使用相同的参数。

print(dag.default_args)
{'owner': 'airflow', 'start_date': datetime.datetime(2022, 2, 2, 3, 0, tzinfo=Timezone('UTC')), 'depends_on_past': False, 'email': ['airflow@example.com'], 'email_on_failure': False, 'email_on_retry': False, 'retries': 1, 'retry_delay': datetime.timedelta(seconds=30)}

我不明白这种行为,你能帮帮我吗?先感谢您。

4

0 回答 0