保存Python-Luigi的返回值

0 投票
1 回答
673 浏览
提问于 2025-04-30 23:46

这里有一个简单的例子。如果我有两个任务,分别是step1和step2,而step1是一个依赖任务,那么我该如何在step2中读取step1的返回值(输出)呢?

class step1(luigi.Task):

    shardNum = luigi.Parameter()

    def run(self):
        with open('workfile1', 'w') as f:
            f.write("TEST")

    def output(self):
        return [luigi.LocalTarget("workfile1")]
        #HOW DO I READ THE RETURN VALUE OF THIS IN STEP2?

class step2(luigi.Task):

    def requires(self):
        #HOW CAN I GET THE TARGET; luigi.LocalTarget("workfile1"); AND USE IT ELSEHOW?
        return step1()

    def run(self):
        with open('workfile2', 'w') as f:
            f.write("TEST")

    def output(self):
        return luigi.LocalTarget("workfile2")

补充说明:这看起来有点像是变通的做法,但能用(有没有更好、更简单的方法呢?)

class step2(luigi.Task):

    ...

    def run(self):
        print(self.requires().output()[0])#prints the output from last function
        with open('workfile2', 'w') as f:
            f.write("TEST")

    ...
暂无标签

1 个回答

0

这是一个简洁的方法:

class step2(luigi.Task):
    ...
    def run(self):
        with self.input()[0].open() as f:
            f.write('TEST')
    ...

如果你不把任务1的输出目标放在一个数组里,那样会更简洁。这样你就可以直接使用 with self.input().open()... 来获取数据了。

撰写回答