【问题标题】:Use Smart Sensors and still get context variable使用智能传感器并仍然获得上下文变量
【发布时间】:2026-01-31 19:25:02
【问题描述】:

我在 Airflow 2.1.4 上,我正在尝试修改自定义传感器以充当 Smart Sensor

除其他外,要允许自定义传感器作为智能传感器工作,您需要为其提供poke_context_fields 类变量。这没有很好的记录,但我认为它只是__init__ 的参数列表,当智能传感器 DAG/Shard 调用它时,您也希望将其传递给self.poke()(尽管我可能是错的)。

所以我有这样的:

poke_context_fields = ['myarg1', 'myarg2']

我已经对此进行了测试,但似乎存在问题:当智能传感器 DAG 调用 self.poke() 时,它会按预期转发这些参数,但它确实 NOT 给了我常规我的poke 方法所期望的context 变量。不幸的是,如果不访问该变量,我的代码将无法工作,因为它需要某些属性,例如 context['ds']context['task_instance'] 等,这些属性仅在执行时可用,而不是在 Python 解析类变量时可用。

我已阅读以下内容 (https://github.com/apache/airflow/issues/11893),但我并未 100% 关注。是否有解决此问题的方法,或者我是否应该得出结论,我不能使用智能传感器,应该等待使用 2.2.0 中发布的可延迟运算符?

【问题讨论】:

标签: airflow airflow-2.x


【解决方案1】:

智能传感器是/曾经是一项实验性功能。最终决定从 2.3.0 版本开始弃用它(参见 PR),转而支持可延迟运算符。

引用docs

Deferrable Operators 本质上取代了智能传感器,并且应该 几乎适用于所有情况。

【讨论】:

    最近更新 更多