我想在两种情况下运行python函数
我知道气流提供了on_success_callback和on_failure_callback 但是这些是任务完成或失败的时间。
答案 0 :(得分:1)
在您的 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)
当每个任务开始时 使用 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