Luigi执行方法的顺序是什么(运行,输出,要求)。我理解require是作为检查任务DAG有效性的第一次检查运行的,但是不应该在run()之后输出?
我实际上是在尝试等待运行中的kafka消息并基于该触发器执行一系列其他任务并返回LocalTarget。像这样:
def run(self):
for message in self.consumer:
self.metadata_key = str(message.value, 'utf-8')
self.path = os.path.join(settings.LUIGI_OUTPUT_PATH, self.metadata_key, self.batch_id)
if not os.path.exists(self.path):
os.mkdir(self.path)
with self.conn.cursor() as cursor:
all_accounts = cursor.execute('select domainname from tblaccountinfo;')
for each in all_accounts:
open(os.path.join(self.path,each)).close()
def output(self):
return LocalTarget(self.path)
但是,我收到错误说:
异常:必须设置path或is_tmp
在返回LocalTarget(self.path)行。为什么luigi尝试执行def output()方法直到def run()完成?
答案 0 :(得分:2)
当您运行管道(即一个或多个任务)时,Luigi首先检查其输出目标是否已存在,如果不存在,则计划运行任务。
路易吉如何知道必须检查哪些目标?只是让他们调用你的任务的output()
方法。