气流版本2.1.0 / Python 版本3.6
你好。
我已经意识到,每当我尝试创建和安排 DAG 在一天中的特定时间运行时,时间戳值都会重置为 UTC。在 DAG 中导入后,我注意到default_args和default_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)}
我不明白这种行为,你能帮帮我吗?先感谢您。