对于回填作业,我尝试了timedelta传感器,但是它似乎要检查执行时间+ 60分钟,而不是当前时间+ 60分钟。 有什么办法可以使当前时间+ 60分钟延迟回填作业?
基本上,这种延迟将避免我达到API速率限制。 当前正在使用以下任务进行延迟,这似乎不起作用。
task_id='wait',
delta=timedelta(minutes=60),
dag=dag
)
答案 0 :(得分:2)
您将需要自己的自定义操作员或传感器,并使用任务实例的start_date
属性。仅需对库中的start_date
进行更改,就使用TimeDeltaSensor
。
如果您复制TimeDeltaSensor源代码,则可以使用以下方法覆盖poke方法:
# ...
target_dttm = context["task_instance"].start_date
target_dttm += self.delta
return timezone.utcnow() > target_dttm
尽管再次阅读您的问题,但我发现您可能只希望操作员在执行过程中保持睡眠。或者是一个带有睡眠模式的python可调用项,并将其通过PythonOperator推送...类似
def hit_api():
pass
def hit_and_back_off:
while True:
try:
hit_api()
except APILimitError:
sleep(<SOME SLEEP>)
except e:
raise
答案 1 :(得分:1)
我发现最简单的解决方案是使用另一个DAG,该DAG会安排回填