<p>把这件事记录下来是因为这个问题让我痛苦了两次,现在我解决了两次。在</p>
<h2>问题分析</h2>
<p>当您将日志级别设置为“调试”时,您将开始看到发生了什么:</p>
<pre><code>[2019-10-09 18:30:05,472] {python_operator.py:114} INFO - Done. Returned value was: False
[2019-10-09 18:30:05,472] {python_operator.py:159} INFO - Condition result is False
[2019-10-09 18:30:05,472] {python_operator.py:165} INFO - Skipping downstream tasks...
[2019-10-09 18:30:05,472] {python_operator.py:168} DEBUG - Downstream task_ids [<Task(DummyOperator): f>, <Task(DummyOperator): g>, <Task(DummyOperator): d>, <Task(DummyOperator): resolve>, <Task(DummyOperator): e>]
[2019-10-09 18:30:05,492] {python_operator.py:173} INFO - Done.
</code></pre>
<p>从中,您可以看到问题不在于“none-unu-failed”错误地处理任务,而是模拟跳过条件的sentinel直接标记<strong>所有</strong>下游依赖项被直接跳过。<strong>这是shortcutuitOperator的一种行为</strong>—跳过所有下游任务,包括下游任务的下游任务。在</p>
<h2>解决方案</h2>
<p>解决这个问题的方法在于认识到是shortcutuitOperator的行为,而不是TriggerRule。一旦我们意识到这一点,就应该着手编写一个更适合我们实际要完成的任务的运算符了。在</p>
<p>我已经包括了我当前使用的操作符;我欢迎任何关于处理单个下游任务修改的更好方法的输入。我相信“跳过下一个,让其余的根据它们的触发规则级联”有一个更好的习惯用法,但是我已经花了太多的时间在这上面了,我怀疑答案更深层次地存在于内部。在</p>
^{pr2}$
<p>经过修改后,这将产生预期的dag结果:</p>
<p><a href="https://i.stack.imgur.com/mfzRB.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/mfzRB.png" alt="Correct Dag"/></a></p>