气流 |按自己的计划运行任务

时间:2021-06-21 21:53:43

标签: python airflow

有没有人知道如何安排特定任务以在其自己的独立时间触发,而不管 schedule_interval 下的设置如何?

我有一个每小时运行一次的 DAG,它至少执行 7 种不同的任务。我想在中间添加第 8 个任务,使其在凌晨 1 点运行。背后的想法是,我希望此任务能够完全验证我全天获得的每小时输出。

更多详情:

<块引用>

我有一个 DAG,它正在从 API 请求中获得响应 每小时。这些指标会随着时间的推移而更新,但在凌晨 1 点 第二天,我想运行一个任务,从 前一天正式“收官”,也会给我安心 前一天的指标是准确的。拥有它会很理想 在同一个 DAG 中,因为我正在使用其他任务来填充数据库 提取的数据。

task_1 hourly
task_2 hourly
task_3 hourly
task_4 daily

谢谢!

2 个答案:

答案 0 :(得分:2)

可以使用 ShortCircuitOperator 来实现此用例。

创建一个函数来检索当前时间并检查执行“task_4”所需的时间,在本例中为凌晨 1 点。假设时间是凌晨 1 点返回 True,否则返回 False。将此 ShortCircuitOperator 任务放在 DAG 中的“task_4”之前。只有函数返回 True 才会执行“task_4”;否则将跳过“task_4”并完成 DAG。

task_1 >> task_2 >> task_3 >> short_circuit_task >> task_4

答案 1 :(得分:1)

您可以使用 Python Schedule 来执行此操作:只需在凌晨 1 点实施后取消此作业即可。

import schedule
import time

def job_that_executes_once():
    # Do some work that only needs to happen once...
    return schedule.CancelJob

schedule.every().day.at('22:30').do(job_that_executes_once)

while True:
    schedule.run_pending()
    time.sleep(1)

请参阅文档 here

还有另一种方式。在该函数中添加一个仅包含年、月和日的日期对象。默认为空对象,如果当前日期与日期对象不同,则将当前日期放入该日期对象中。如果当前日期与日期对象相同,则忽略此运行。并且每次调用该任务时,只需检查是否满足此条件即可。