使用智能传感器并仍然获取上下文变量
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?
我正在使用 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?