使用智能传感器并仍然获取上下文变量

Use Smart Sensors and still get context variable

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

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

所以我喜欢它:

poke_context_fields = ['myarg1', 'myarg2']

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

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

智能传感器 is/was 一项实验性功能。最终决定从 2.3.0 版开始弃用它(参见 PR)以支持可延迟运算符。

引用 docs:

Deferrable Operators essentially supersede Smart Sensors, and should be preferred for almost all situations.