任务的气流回调

时间:2019-06-18 12:05:23

标签: python airflow

我想在两种情况下运行python函数

  1. 当Dag运行时表示有人触发dag
  2. 每项任务开始时

我知道气流提供了on_success_callback和on_failure_callback 但是这些是任务完成或失败的时间。

2 个答案:

答案 0 :(得分:1)

  1. 当 Dag 运行时表示有人触发了 dag。 为了解决这个问题,我建议有两种选择。
  • 在您的 dag 中添加一个 PythonOperator 作为初始任务。这样,您可以在一开始就执行自定义操作以表示 DAG 的开始。当然,这不会为您提供特定的 DAG 级别触发器,但它可以模拟这一点。

         begin_task = PythonOperator(
            task_id="begin_task_demo",
            python_callable=_begin_dag_callback_method)
    
  • 对于 DAG 中的每个任务,添加 on_execute_callback。这就像 on_failure 和 on_success 回调一样,但它在任务被拾取并开始执行时执行。如果您将此添加到 DAG 中的第一个任务,您将知道 DAG 何时被触发。

        begin_task = PythonOperator(
            task_id="begin_task_demo",
            python_callable=_begin_dag_callback_method,
            on_execute_callback=_on_execute_call_back)
    
  1. 当每个任务开始时 使用 on_execute_callback

    可以轻松解决此问题
    begin_task = DummyOperator(
    task_id="dummy_task_demo",
    on_execute_callback=_on_execute_call_back)
    
    

答案 1 :(得分:0)

这是我的一些想法:

  • 当Dag运行时意味着有人触发了dag:也许这可能是        通过向上游添加任务来完成

  • 每个任务开始时:尝试使用装饰器
    假设您有一个执行任务的PythonOperator

    t = PythonOperator(
         task_id="copy_staging_" + t,
         provide_context=True,
         python_callable=my_function,
         dag=dag)
    

您可以使用这样的装饰器,并在装饰器中的实际功能启动之前定义该函数调用

@my_decorator 
def my_function(**kwargs): 
    do_something()


def my_decorator(function):
    def my_function():
        print("I want to print extra stuff")
        function()
    return my_function