Luigi - 运行时未实现的%s

时间:2017-03-30 01:58:07

标签: python luigi

我试图以一种非常简单的方式学习如何使用luigi。就像新手一样,我想出了这段代码

import luigi

class class1(luigi.Task):

  def requires(self):
     return class2()

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

 def run(self):
    print 'IN class A'


class class2(luigi.Task): 

  def requires(self):
     return []

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


if __name__ == '__main__':
  luigi.run()

在命令提示符下运行此错误说明

raise RuntimeError('Unfulfilled %s at run time: %s' % (deps, ',     

3 个答案:

答案 0 :(得分:10)

这是因为您为class2定义了输出但从未创建它。

让我们分解......

运行时

python file.py class2 --local-scheduler
路易吉会问:

  • 是否已在磁盘上输出class2? NO
  • 检查class2:NONE
  • 的依赖关系
  • 执行run方法(默认为' s和空方法pass
  • run method没有返回错误,因此作业成功完成。

但是,在运行时

python file.py class1 --local-scheduler
路易吉将:

  • 是否已在磁盘上输出class1? NO
  • 检查任务依赖关系:是:class2
  • 暂停以检查class2的状态
    • 是磁盘上class2的输出? NO
    • 运行class2 - > 正在运行 - >完成没有错误
    • 是磁盘上class2的输出?不 - >提出错误
除非满足以前的所有依赖关系,否则luigi永远不会运行任务。 (即他们的输出在文件系统上)

答案 1 :(得分:0)

我也是luigi的初学者。感谢您指出这种错误。

下面,我设法解决了上一个问题,将其添加到class2

def run(self):
     _out = self.output().open('w')
     _out.write(u"Hello World!\n")
     _out.close()
     print('in class B')

答案 2 :(得分:0)

出现此错误是因为如果您获得永远不会创建的输出。 前任。如果输出文件夹按时间戳创建。 时间戳每秒都在变化,因此它永远不会相同。 所以可能会出现错误。