我在LocalExecutor上使用气流1.9.0。
我有一个子目录,其中包含两个长期运行的任务。 subdag的结构为:
def create_subdag(name_suffix, default_args):
dag_name = '{}.{}'.format(parent_dag_name, name_suffix)
subdag = DAG(dag_name, start_date=start, schedule_interval=schedule, default_args=default_args)
t1 = BashOperator(
task_id='print_date',
bash_command='some_long_running_cmd_1',
dag=subdag)
t2 = BashOperator(
task_id='sleep',
bash_command='some_long_running_cmd_2',
dag=subdag)
sub_dag_1 = SubDagOperator(
subdag=create_subdag('subdag1', default_args),
task_id='subdag1',
dag=dag)
即使任务t1仍在运行,我也希望能够在任务t2失败时重新运行它。通常,清除失败任务的状态会使它重新计划,即使dag中的其他任务正在运行。但是,清除任务t2的状态不会使其重新计划。此外,在sub_dag_1仍在运行时清除其状态似乎会使调度程序进入挂起状态,即使在t2完成后,DAG也不会从running
过渡出来,但是t1
从未重新计划执行。
是否有一种方法可以立即在subdag中重新运行任务,而无需等待其他任务完成?
答案 0 :(得分:0)
我有以下可能的解决方案:
t2
,然后再手动重新独立运行t2 sub_dag_1
完成时(要么以失败状态的成功状态结束),然后清除t2
将自动重新触发t2的运行。t2
仍在运行且t1
也正在运行的情况下,如果您仍想重新运行sub_dag_1
,请使sub_dag_1
成功(非递归)。然后重复2。希望这会对您有所帮助。顺便说一句,SubDagOperator
并不是在实际应用中使用的很好的运算符,根据我的经验,它会增加更多的问题(例如,subdag deadlock,芹菜工作者开始执行subdag任务的速度变慢等)与解决的问题进行比较。