python变量中的气流参考dag名称

python变量中的气流参考dag名称,python,airflow,Python,Airflow,我有一个像下面这样的dag twomins=DAG( “每2分钟插入一次”, 默认参数=默认参数, description='每隔2分钟', 计划时间间隔=无, catchup=False, 最大有效运行次数=1, doc\u md=文档 ) 然后我尝试通过python变量引用这个DAG名称 dagname = twomins 我的任务如下所示 max\u ts=PythonOperator( 任务\u id=“获取\u最大值”, python\u callable=get\u max\u

我有一个像下面这样的dag

twomins=DAG(
“每2分钟插入一次”,
默认参数=默认参数,
description='每隔2分钟',
计划时间间隔=无,
catchup=False,
最大有效运行次数=1,
doc\u md=文档
)
然后我尝试通过python变量引用这个DAG名称

dagname = twomins
我的任务如下所示

max\u ts=PythonOperator(
任务\u id=“获取\u最大值”,
python\u callable=get\u max\u ts,
提供上下文=True,
dag=dagname
)
但它的错误是这样的

回溯(最近一次呼叫最后一次):
文件“upsert\u every\u 2and10min.py”,第148行,in
dag=同步间隔
文件“/root/.local/lib/python3.7/site packages/afflow/utils/decorators.py”,第72行,在包装器中
dag_args=复制(dag.default_args)或{}
AttributeError:“str”对象没有“default_args”属性
我是不是遗漏了什么


我使用它的原因是,一些ETL管道将决定应该选择哪个计划。如果配置有2分钟,那么dag
2分钟将用于该任务。

我认为您在气流和dag的工作方式中遗漏了一个关键点。您拥有的文件只是一个DAG配置文件,它实际上并没有执行某种意义上的代码。因此,我认为您不能通过这样的条件检查来决定文件中的DAG

从:

有一件事需要你仔细考虑(一开始可能不是每个人都很直观),那就是这个Python脚本实际上只是一个配置文件,将DAG的结构指定为代码

以及

人们有时认为DAG定义文件是一个可以进行实际数据处理的地方——事实并非如此!脚本的目的是定义DAG对象


如果检查依赖于间隔,那么为什么不更改
计划\u间隔

在决定执行哪项任务时,您可能应该使用PythonBranchOperator进行条件检查。我不认为这是导致错误的原因-回溯指向的似乎是其他东西。但在我的情况下,dagname可能有不同的值,让day
dagname=10min
,然后任务将选择
tenmins
作为dag(一个包含多个dag的python文件)我不认为airflow在一个Python文件和多个DAG的情况下是这样工作的。每个文件都应该是DAG定义文件(单数)。请看下面的答案,我的问题是计划间隔,但我认为我不能为每个任务使用一个dag和多个计划间隔。