我正在创建一个DAG,它需要使用从用于触发作业的POST Json传入的kwargs设置全局变量的功能。 到目前为止,我已经尝试过这种方式:

import airflow
from airflow import DAG
from datetime import timedelta

DAG_Name = 'dag_test'

DEFAULT_ARGS = {
    'owner': '...',
    'depends_on_past': False,
    'email': ['...'],
    'email_on_failure': True,
    'start_date': datetime(2020,8,31)
}

dag = DAG(DAG_Name, default_args=DEFAULT_ARGS, dagrun_timeout=timedelta(hours=2))

snap_date = ''
output_loc = ''
recast = ''

def define_param(**kwargs):
    global snap_date
    global output_loc
    global recast
    snapshot = str(kwargs['dag_run'].conf['snap_date'])
    output_s3 = kwargs['dag_run'].conf['output_loc']
    recast = str(kwargs['dag_run'].conf['recast'])


DEFINE_PARAMETERS = PythonOperator(
    task_id='DEFINE_PARAMETERS',
    python_callable=define_param,
    provide_context=True,
    dag=dag)

但这是行不通的。 我将如何使用kwargs设置全局dag变量?

#1楼 票数:0

使用Variable.set因为它将对数据库进行实际更新,并在需要时为您处理会话和序列化。

Variable.set("snap_date", "2019-09-17")

参考: https : //github.com/apache/airflow/blob/1.10.1/airflow/models.py#L4558-L4569

  ask by JMV12 translate from so

未解决问题?本站智能推荐:

1回复

使用变量作为关键字传递给Python中的** kwargs

我有一个通过API更新记录的功能。 API接受各种可选的关键字参数: 我有另一个函数,它使用第一个函数来更新记录中的单个字段: 这不起作用。 我打电话的时候: update_field(email='joe@me.com', field='name', field_val
1回复

从传递的函数中获取* args和** kwargs

在下面的代码中,如何在函数f中获得* args和** kwargs而不需要包装函数? 尝试失败1: 导致错误: 尝试2失败:
1回复

使用** kwargs将传递给函数的参数映射到本地名称空间?

如果这是一个重复的问题,我事先表示歉意。我想更好地了解python中的** kwargs东西,实际上是希望能够编写一个能够处理拆包并内部引用key:value对的key:value 。传递** kwargs参数。 我的小例子如下: arguments = {'apple': 50, '
1回复

如何检查可能传递给函数的所有kwarg

假设我有以下函数(在这种情况下为构造函数), 如何检查可以传递给此函数的所有可能的关键字参数? 谢谢你
2回复

为什么不能在函数内使用kwargs更改变量? [重复]

这个问题已经在这里有了答案: Python 3答案中 ** kwargs参数的可变性 Python初学者的问题。 我正在尝试更改函数中某些变量的值,但我不明白为什么有时它起作用而有时却不起作用。 所以我想知道幕后发生的事情。 如果我写: 这仍然打印
3回复

在** kwargs中使用OrderedDict

是否可以将OrderedDict实例传递给使用**kwargs语法并保留排序的函数? 我想做的是: 但实际结果是: 即,典型的随机字典排序。 我有其他用途,明确设置顺序是好的,所以我想保持**kwargs而不是只是将OrderedDict作为常规参数传递
2回复

在使用** kwargs时分配* args

我有一个看起来像这样的python函数: 我有一本字典(kwargs),其中只有a和b作为项目。 我想这样称呼测试: 并为args分配更多值。 我该怎么做,如果不能,那么正确的方法是什么?
2回复

在while循环中使用kwargs-Python 3

在下面的代码中,我试图检查值(b)是否为kwargs中的键,如果是,请执行其余操作。 但是,当我尝试运行代码时,它总是只允许一个选项。 我发现很难解释,因此我举一个例子: 即使它在字典中,它也不会接受石头,但是它将接受药水。 其他时间则相反。 起初我以为是因为它处于wh