任务在气流中出现意外的论点'dag'

时间:2019-05-10 05:40:35

标签: airflow airflow-scheduler

我创建了一个以PythonOperator作为运算符的任务。它在另一个带有参数的文件夹中调用函数。但实际上,由于必须使用参数dag=dag,因为它用于指向dag上下文。

dags/
- my_dag.py
  sub_folder/
  - __init__.py
  - my_functions.py

我的DAG包含任务1和任务2。他们将从子文件夹中调用该函数,并将参数传递给print。

my_dag.py

import datetime as dt

from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from airflow.operators.python_operator import PythonOperator

from sub_folder.my_functions import task1, task2

args = {
    'owner': 'hello',
    'start_date': dt.datetime(2019, 1, 1),
    'retries': 1,
    'retry_delay': dt.timedelta(minutes=2)
}

dag = DAG(
    'try',
    default_args = args,
    schedule_interval = dt.timedelta(minutes=2))

task1 = PythonOperator(
    task_id='task1',
    python_callable=task1,
    provide_context=True,
    op_kwargs={'idx': "Hello "},
    dag=dag,
)

task2 = PythonOperator(
    task_id='task2',
    python_callable=task2,
    provide_context=True,
    op_kwargs={'idx': "World!"},
    dag=dag,
)

task1 >> task2

可调用函数只是简单的函数,它打印传递给它们的参数。

my_functions.py

def task1(idx):
    print(f"Task 1! {idx}")

def task2(idx):
    print(f"Task 2! {idx}")

我的task1总是重试运行,有时会失败。我查看了日志以了解发生了什么。我发现它得到一个

TypeError: task1() got an unexpected keyword argument 'dag'

我不知道这里发生了什么。显然,我必须调用dag = dag,这实际上是使操作员指出必须与之关联的dag容器的一个论点。

1 个答案:

答案 0 :(得分:2)

my_functions.task1与名为PythonOperator的{​​{1}}之间存在冲突

尝试:

task1