【问题标题】:How to handle output with Luigi如何使用 Luigi 处理输出
【发布时间】:2017-01-22 13:46:09
【问题描述】:

我正在尝试了解 luigi 的工作原理,我明白了这个想法,但实际实现有点困难;)这就是我所拥有的:

class MyTask(luigi.Task):

    x = luigi.IntParameter()

    def requires(self):
        return OtherTask(self.x)

    def run(self):
        print(self.x)

class OtherTask(luigi.Task):

    x = luigi.IntParameter()

    def run(self):
        y = self.x + 1
        print(y)

这会因RuntimeError: Unfulfilled dependency at run time: OtherTask_3_5862334ee2 而失败。我认为我需要使用def output(self): 生成输出来解决此问题\功能。而且我无法理解如何在不写入文件的情况下产生合理的输出,比如:

def output(self):
    return luigi.LocalTarget('words.txt')

def run(self):

    words = [
            'apple',
            'banana',
            'grapefruit'
            ]

    with self.output().open('w') as f:
        for word in words:
            f.write('{word}\n'.format(word=word))

我已经尝试阅读文档,但我根本无法理解输出背后的概念。如果我只需要输出到屏幕怎么办。如果我需要将一个对象输出到另一个任务怎么办?谢谢!

【问题讨论】:

  • 这里混杂了一堆问题,但只有一个带有问号。

标签: python luigi


【解决方案1】:

如果我需要将一个对象输出到另一个任务怎么办?

Luigi 任务可以在不同的进程中运行。因此,如果您想要交换一个结果为一个任务。

与编写需要目标的 output() 方法相反,您还可以重写 complete() 方法,您可以在其中编写任何允许将任务视为完成的自定义逻辑。

【讨论】:

  • 好的,这听起来很公平,你能指点我一些例子吗?我开始怀疑我可以覆盖完整的方法,但我无法找到与该主题相关的任何内容。谢谢!
  • 是的,当事情完成时返回 true 是你需要做的所有事情来覆盖 complete()。 complete() 的基本行为是检查 output() 返回的 Target 是否存在
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-30
相关资源
最近更新 更多