airflow - DAG导入两种方式的区别?
问题描述
我正在尝试创建动态 dag,但目前似乎失败了。我遇到了以两种不同的方式创建 DAG 对象:
from airflow.models import DAG
https://airflow.apache.org/concepts.html#latest-run-onlyfrom airflow import DAG
https://airflow.apache.org/tutorial.html 这真的让我很困惑,因为在同一个文档中有两种实例化 DAG 对象的方法。
解决方案
两者都在导入相同的 DAG 类。只是 python 导入如何工作的一个属性。
当您这样做时,from airflow.models import DAG
python 正在导入模型文件并将变量 DAG 分配给模型文件中定义的 DAG 类。
当您这样做时,from airflow import DAG
python 正在导入在init .py中定义的变量 DAG,实际上就是from airflow.models import DAG
.
最小版本是:
模型.py
class DAG():
pass
初始化.py
from airflow.models import DAG
dags/dag_file.py
# import __init__.py which imports models.py which contains DAG
from airflow import DAG
# or this which just imports models.py which contains DAG
from airflow.models import DAG
话虽如此,如果您的动态 DAG 失败,我怀疑它与此导入有关
推荐阅读
- python - Django 模板。整数迭代的最佳方法
- r - R:根据条件将函数应用于两个不同的表(空间连接)
- python - 如何在映射多个 Foursquare 结果且 API 结果为空时数据框为空时在 Python 中抑制 KeyError
- python - 绘制熊猫数据框
- jenkins - Sonarqube 扫描获取整个代码或仅获取哈希值
- javascript - Ion.RangeSlider。解析值的问题
- r - R Unite 函数在 Shiny 与代码中的行为不同
- kubernetes - Istio/Envoy 边缘代理 EnvoyFilter (1.9.0)
- python - 通过复制数组中的每个项目来创建新的 numpy 数组
- ffmpeg - 使用 ffmpeg 在 webm 传输流中生成时间戳