Airflow DAG 任务依赖,打破长线
Airflow DAG task dependency, breaking up long lines
在 airflow 中,我可以缩短这些任务依赖行吗?
a >> b >> c >> f >> G
a >> b >> d >> f >> G
到
a >> b
b >> c
b >> d
c >> f
d >> f
f >> g
这些是等价的?时间或效率上有什么不同吗?
询问您是否使用代码格式化程序行长度的原因是第一个样式和更长的变量任务名称问题。
有什么推荐或建议吗?
这些变体中的任何一个都没有任何时间或效率 pros/cons,但我认为这更像是一个“什么更具可读性”的问题。
第一个更具可读性。但是,存在一些重复,可以通过使用列表让任务并行执行来缩短它:
a >> b >> [c, d] >> f >> G
对于非常长的依赖链,我喜欢使用方便的 chain()
方法。它更灵活一点(即你不能使用位移运算符设置两个任务列表之间的依赖关系,但你可以使用 chain()
)并且 可能 被认为更容易接近,因为它是一个函数.奇怪的是,根据我的经验,这确实有助于 line-length 代码格式化的限制,并且可以使用这些格式化程序很好地重新格式化(例如黑色)。使用此方法,示例依赖项可以重写为:
from airflow.models.baseoperator import chain
chain(a, b, [c, d], f, G)
在 airflow 中,我可以缩短这些任务依赖行吗?
a >> b >> c >> f >> G
a >> b >> d >> f >> G
到
a >> b
b >> c
b >> d
c >> f
d >> f
f >> g
这些是等价的?时间或效率上有什么不同吗? 询问您是否使用代码格式化程序行长度的原因是第一个样式和更长的变量任务名称问题。
有什么推荐或建议吗?
这些变体中的任何一个都没有任何时间或效率 pros/cons,但我认为这更像是一个“什么更具可读性”的问题。
第一个更具可读性。但是,存在一些重复,可以通过使用列表让任务并行执行来缩短它:
a >> b >> [c, d] >> f >> G
对于非常长的依赖链,我喜欢使用方便的 chain()
方法。它更灵活一点(即你不能使用位移运算符设置两个任务列表之间的依赖关系,但你可以使用 chain()
)并且 可能 被认为更容易接近,因为它是一个函数.奇怪的是,根据我的经验,这确实有助于 line-length 代码格式化的限制,并且可以使用这些格式化程序很好地重新格式化(例如黑色)。使用此方法,示例依赖项可以重写为:
from airflow.models.baseoperator import chain
chain(a, b, [c, d], f, G)