我创建了一个以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容器的一个论点。
答案 0 :(得分:2)
my_functions.task1
与名为PythonOperator
的{{1}}之间存在冲突
尝试:
task1