繁体   English   中英

有效地为 airflow 中的 DAG 中的所有任务设置 task_concurrency

[英]Efficiently set task_concurrency for all tasks in a DAG in airflow

我的要求:我想避免 airflow 2.1.4 中相同任务的重叠任务运行。 任务的以下运行应该仅在其前面的 task_run 完成后开始(成功或错误都可以)。 我找到了这个全面的答案,但它似乎没有有效地涵盖我的用例: https://stackoverflow.com/a/56370721/17490201

什么对我不起作用:

  1. 'depends_on_past': True的,因为我希望启动下面的 task_run,即使前一个出错了。
  2. max_active_runs=1因为它在 DAG 级别。 这意味着,如果一个任务出于某种原因意外地运行了很长时间,它将延迟整个下一个 dag_run 及其所有 task_runs。 这是不可取的,因为我不希望一项任务潜在地影响所述 DAG 中的所有其他任务。
  3. 从功能的角度来看,每个操作员/任务的task_concurrency=1是我想要的,但我必须为每个操作员(可能超过一百个)设置它,这是重复的,因此效率低下(并且烦人:P)。
  4. 在 DAG 级别设置task_concurrency=1会导致错误。 我希望,这个论点被传递给那个特定 DAG 中的所有任务。

有没有一种优雅的方法可以避免重叠的任务运行,而不必为每个操作员/任务设置/编写/编码它?

要在每个任务中设置task_concurrency参数,必须使用default_args字典。 文档中引用。

您可以在创建 DAG 时将 default_args 传递给 DAG,而不必为每个 Operator 单独指定此参数(相同的一组默认参数),它会自动将它们应用于与其关联的任何运算符。

请参考下面的代码示例。

with DAG(
    'task_concurrency_test_dag',
    # These args will get passed on to each operator
    # You can override them on a per-task basis during operator initialization
    default_args={
        'depends_on_past': False,
        'email_on_failure': False,
        'email_on_retry': False,
        'retries': 1,
        'retry_delay': timedelta(minutes=5),
        'task_concurrency': 1,  ## Concurrency parameter
    },
    description='A simple tutorial DAG',
    schedule_interval=timedelta(days=1),
    start_date=datetime(2021, 1, 1),
    catchup=False,
    tags=['example'],
) as dag:
    ....
    ....

如果我正确理解了您的请求,则DAG(concurrency=1)就是您需要的东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM