气流 - 有一个意外的关键字参数'conf'



我正在学习Apache Airflow,以便在我的工作场所实现它,当我试图将参数传递给这样的函数时,我偶然发现了一个问题(我遵循了文档(

from airflow import DAG
import pendulum
from datetime import datetime, timedelta
from airflow.operators.python_operator import PythonOperator
args = {
"owner": "airflow",
"start_date": pendulum.datetime(year=2020, month=10, day=5, tzinfo='Asia/Shanghai'),
"retries": 5,
"retry_delay": timedelta(minutes=3)
}
dag = DAG(
"example_dag_v2",
schedule_interval="@daily",
default_args=args
)
def my_mult_function(number):
return number*number
mult_task = PythonOperator(
task_id = 'mult_task',
provide_context=True,
python_callable=my_mult_function,
op_kwargs={'number': 5},
dag = dag
)
mult_task

我一直收到这个错误

类型错误:my_mult_function((获得了意外的关键字参数"conf">

我哪里做错了?

解决方案:

所以我找到了解决方案,但仍然不明白为什么解决方案是

def my_mult_function(number, **kwargs):
return number*number

我在参数上传递了**kwargs,它起作用了!但我仍然不明白为什么我需要通过这些考试?

您已经设置了provide_context=True,因此PythonOperator将向python_callable发送执行上下文。因此,作为一个通用的catch-all关键字参数,**kwargs解决了这个问题。

https://github.com/apache/airflow/blob/v1-10-stable/airflow/operators/python_operator.py#L108.

如果您不打算使用上下文中的任何内容,则设置provide_context=False

最新更新