Python 从另一个文件导入任务依赖项

Python 从另一个文件导入任务依赖项,python,dependencies,airflow,scheduler,directed-acyclic-graphs,Python,Dependencies,Airflow,Scheduler,Directed Acyclic Graphs,我的气流有4个任务。任务id为task_id1、task_id2、task_id3、task_id4的t1、t2、t3、t4 但是,任务的执行顺序为:t1>>t2>>t3>>t4 将从文本文件中读取 Example: the text file will have: t1 t2 t3 t4 or t1 t2 t4 t3 So the order will be: t1 >> t2 >> t3 >> t4 or t1 >> t2 >

我的气流有4个任务。任务id为task_id1、task_id2、task_id3、task_id4的t1、t2、t3、t4

但是,任务的执行顺序为:t1>>t2>>t3>>t4 将从文本文件中读取

Example: the text file will have:
t1
t2
t3
t4

or

t1
t2
t4
t3

So the order will be: t1 >> t2 >> t3 >> t4   or  t1 >> t2 >> t4 >> t3

But if i try:
f= open("file_name.txt")
lines = f.readlines()
task1 = lines[0].rstrip()
task2 = lines[1].rstrip()
task3 = lines[2].rstrip()
task4 = lines[3].rstrip()

and then use:
task1 >> task2 >> task3 >> task4

I get error:
×Broken DAG: unsupported operand type(s) for >>: 'str' and 'str
有什么建议吗

实际代码:

from datetime import timedelta
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from airflow.utils.helpers import chain
from airflow.utils.dates import days_ago
from airflow import AirflowException
default_args = {
'owner': 'airflow',
'depends_on_past': False,
'start_date': days_ago(2),
}

# Create DAG instance
dag = DAG(
'test',
default_args=default_args,
description='A simple tutorial DAG',
catchup=False,
schedule_interval=timedelta(seconds=20),
)


# First task
t1 = BashOperator(
task_id='task1',
bash_command='echo "task 1"',
dag=dag,
)

# Second task
t2 = BashOperator(
task_id='task2',
bash_command='echo "task2"',
dag=dag,
)

# same for t3 and t4

f= open("file_name.txt")
lines = f.readlines()
task1 = lines[0].rstrip()
task2 = lines[1].rstrip()
task3 = lines[2].rstrip()
task4 = lines[3].rstrip()
f.close()

task1 >> task2 >> task4 >> task3
文件_name.txt可以有: t1 t2 t4 t3


我想要此订单,但此订单必须来自外部文件,而不是在同一文件中。

运算符之间设置了依赖关系。运算符是python类。不清楚文本文件中到底有什么。它是您的dag代码,还是只是一个您应该阅读并应用于代码的依赖项列表?可能,首先,您需要了解此运算符的作用()。@RomanZhuravlev这不是python的按位操作。这是我的错。然而,OP的数据显然是
str
type文本文件有我想要读取并应用于代码的依赖项列表。如果文本文件第1行中有t1,第2行中有t2,则气流必须工作:t1>>t2如果文本文件第1行中有t2,第2行中有t1,则气流必须工作:t2>>t1
This thing helped:
def str_to_class(classname):
    return getattr(sys.modules[__name__], classname)

task1 = ''
task2 = ''
task3 = ''
task4 = ''

f= open("(path_to_scheduler_list.txt")
lines = f.readlines()
task1 = lines[0].rstrip()
task2 = lines[1].rstrip()
task3 = lines[2].rstrip()
task4 = lines[3].rstrip()
f.close()
task1 = str_to_class(task1)
task2 = str_to_class(task2)
task3 = str_to_class(task3)
task4 = str_to_class(task4)

task1 >> task2 >> task3 >> task4