使用“with dag as DAG(...)”子句创建 DAG 有好处吗

Rob*_*lds 4 airflow airflow-scheduler

我按如下方式创建 Airflow DAG:

dag = DAG(...)
Run Code Online (Sandbox Code Playgroud)

但在多个教程和课程中,我看到他们使用with ... as这样的子句:

with DAG(...) as dag:
    # Code that will use the dag variable.
Run Code Online (Sandbox Code Playgroud)

我想这样,DAG实例将在调度程序执行代码块后被销毁,但是这样做有真正的好处吗?我找不到任何讨论此问题的文档。

For*_*est 6

是的。

如果您了解它的with...as作用,那么您应该明白它对气流生态系统的影响实际上没有什么不同。

具体来说,它确保非托管资源(在本例中是 DAG 类的实现)得到正确清理,即使抛出异常(无需每次都使用 try/ except 块。)

此外,不必添加dag=dag到每一个中也是一件好事。

  • 但实际上需要清理什么?例如,经常使用“with”来确保打开的文件句柄自动关闭。Airflow DAG 需要确保清理什么? (3认同)