我正在BaseSensorOperator
中使用Airflow。我有一个用例,其中我希望BaseSensorOperator.poke(context)
函数将一些信息传递给poke
的下一个调用。我尝试按如下方式使用Xcom(通过无意义的值传递模拟情况):
def poke(self, context):
task_instance = context['task_instance']
old_value = task_instance.xcom_pull(key='passing_this_value')
if old_value:
logging.info(f'retrieved from Xcom {old_value}')
else:
logging.info('no value was retrieved')
new_value = datetime.now()
logging.info(f'sending this value to Xcom {new_value}')
task_instance.xcom_push(key='passing_this_value', value=new_value)
if new_value.minute % 10 == 0:
return True
else:
return False
当使用method='poke'
创建传感器任务时,此方法效果很好,但当method='reschedule'
时,此任务失败,因为在重新计划中,该运行中的任务已清除Xcom。
有办法解决吗?我可以使用Variable
,但这会大大分散可变空间。还有其他建议吗?