Airflow 子运算符死锁

Airflow 子运算符死锁,airflow,apache-airflow,Airflow,Apache Airflow,我遇到了一个问题,由几个子DAG操作符组成的DAG无限期挂起 设置: 使用CeleryExecutor。在本例中,假设我们有一个worker可以同时运行五个任务。 我遇到的DAG问题是并行运行多个子DAG操作符。为了说明的目的,考虑下面的图,其中每个节点都是一个子代数: 问题是:DAG将停止在DAG的高并行部分进行处理。根本原因似乎是顶级子DAG操作符占用了所有五个可用于运行任务的插槽,因此这些子DAG操作符中的任何子任务都无法运行。这些子任务陷入排队状态,没有人取得进展 我有点惊讶,SubD

我遇到了一个问题,由几个子DAG操作符组成的DAG无限期挂起

设置: 使用CeleryExecutor。在本例中,假设我们有一个worker可以同时运行五个任务。 我遇到的DAG问题是并行运行多个子DAG操作符。为了说明的目的,考虑下面的图,其中每个节点都是一个子代数:

问题是:DAG将停止在DAG的高并行部分进行处理。根本原因似乎是顶级子DAG操作符占用了所有五个可用于运行任务的插槽,因此这些子DAG操作符中的任何子任务都无法运行。这些子任务陷入排队状态,没有人取得进展

我有点惊讶,SubDagOperator任务会与它们自己的子任务竞争任务运行槽,但现在对我来说这是有意义的。是否有关于编写我违反的子运算符的最佳实践


我的计划是通过创建一个自定义操作符来封装当前封装在子操作符中的任务,从而解决这个问题。我想知道是否有人建议创建一个由其他操作符组成的操作符?

似乎应该避免子操作符,因为它会导致死锁问题。我最终发现,对于我的用例,编写自己的自定义
BaseOperator
子类来完成我在SubDagOperator中执行的任务对我来说是最好的。编写operator类比我预期的要容易得多。

据我所知,处理此类并发死锁的方法是使用
pool
s,但我没有足够的经验来编写答案。您的图像似乎有问题。建议阅读您能提供一个新运算符的示例吗?