Python中

时间:2016-11-28 12:57:28

标签: python parallel-processing tmux directed-acyclic-graphs airflow

如何在多个类别的基础上并行运行/实例化Dag(气流)?

例如:  我有一个气流(DAG),我定期运行 我如何安排dag在不同的 Batchnames 上平行运行(在parallet中):

  1. 为batch1运行dag(在args中传递批处理名称)
  2. 为batch2运行dag(在args中传递批处理名称)应该与 1 并行运行 。 。
  3. 等等

    我使用环境变量来传递 Batchnames ,然后在服务器上使用多个 tmux 会话并行运行dag,但它已经搞砸了。

    我可以使用哪种更好的方法,我可以节省时间并同时为多个蝙蝠侠运行dag?

    感谢您的时间。

1 个答案:

答案 0 :(得分:0)

由于airflow运行表示bash-shell命令图的python类,因此可以通过创建两个独立的DAG在气流中执行此操作。这是对tutorial

的略微修改
dag = DAG(dag_id='batch')
task = [ BashOperator(
             task_id='templated',
             bash_command=templated_command,
             params={'batch_name': batch_name},
             dag=dag)
        for batch_name in ["batch one", "batch two"]]

dag.add_task(task[0])
dag.add_task(task[1])

由于没有依赖性,只要气流已经设置,它们就应该并行运行。如果需要设置shell环境变量,请在模板中的某处添加VAR = {{params.batch_name}}。

假设您的程序使用sys.argv,您还可以使用普通作业控制来启动:

python ~/airflow/dags/tutorial.py "batch one" &
python ~/airflow/dags/tutorial.py "batch two" &
wait