BaseSensorOperator的timeout和execution_timeout参数之间的预期区别是什么?

时间:2019-11-05 04:25:23

标签: airflow

BaseSensorOperator版的{1.1}版本1.10.6文档。

BaseSensorOperator继承自BaseOperator,文档指出timeout (int) – Time, in seconds before the task times out and fails

我不了解execution_timeout (datetime.timedelta) – max time allowed for the execution of this task instance, if it goes beyond it will raise and fail.所提供的功能是timeout

我已经查看了每种用法的代码。他们似乎在情感上做着同样的事情,尽管我认为行为上存在意外的差异。我为此here提交了JIRA。可能是故意的,只是没有记录在案。

在文档中找不到execution_timeout参数的原因,否则将不存在。也许只是记录不好?

1 个答案:

答案 0 :(得分:0)

BaseSensorOperator在内部实现了execute,并根据poke使用它来运行您的poke_interval实现。 execute的此实现利用timeout属性来确定执行已运行了多长时间-以防您的poke正在运行,但永远不会得出True

execution_timeout中的BaseOperator对我来说有点神秘,我无法将其归结为任何具体用法。但是,作为思想实验,请考虑以下情况:您实现了一个传感器,而您的poke实现中的某些操作则需要花很长时间甚至可能永远无法完成。例如:

def poke(...):
    while True:
        print("Wasting your time...")

由于每个戳中都存在此循环,因此单个戳的长度是无限的。因此,您永远不会真正检查您的timeout,因为它只是poke的一次调用。考虑到这一点,我猜想execution_timeout在那里可以发现这样的问题并拔掉插头。我想肯定会确认。