Luigi任务方法执行顺序

时间:2016-12-29 07:13:23

标签: python-3.5 luigi

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()完成?

1 个答案:

答案 0 :(得分:2)

当您运行管道(即一个或多个任务)时,Luigi首先检查其输出目标是否已存在,如果不存在,则计划运行任务。

路易吉如何知道必须检查哪些目标?只是让他们调用你的任务的output()方法。