所以我想创建一个基于从前一个 dag 传递的消息创建动态任务的 dag。 前任:- 我有一个主 dag 和一个从 dag。 从 master dag,我传递了一个国家列表,例如:[us,uk,fr] 到 slave dag 我想阅读此消息并在 slave dag 中创建三个任务。
通过将这些国家/地区的列表保存在变量中并将其放入 dag 定义中(如下面的代码),我能够使用以下代码实现此目的。
with airflow.DAG(
'slave_dag',
'catchup=False',
default_args=default_args,
schedule_interval=None) as dag:
start= python_operator.PythonOperator(
task_id = 'start',
python_callable = start,
retries = 1,
provide_context = True,
xcom_push=True
)
params = Variable.get('countries')
params=params.replace("'","")
params = json.loads(params)
for region in params['region']:
region_task = TriggerDagRunOperator(
task_id=f"{region}",
trigger_dag_id="another_dag",
params= {'condition_param': True,'marketplace': region},
python_callable=trigger_dag,
retries=1,
retry_delay = datetime.timedelta(minutes=5)
)
start.set_downstream(region_task)
但我不想要这个,我不能将它保存在变量中,因为许多 master dag 可以调用同一个奴隶并通过不同的国家。所以如果两个master同时更新变量就会有问题。所以我需要从 master dag 获取值。我们通常使用这个context['dag_run'].conf['message']
访问python函数中master dag中传递的值但我无法在 dag 定义中访问它。有没有办法实现这一目标?或任何其他我可以创建此 dag 的方式。