【问题标题】:Luigi - Unfulfilled %s at run timeLuigi - 运行时未完成 %s
【发布时间】:2017-08-23 17:56:51
【问题描述】:

我正在尝试以一种非常简单的方式学习 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, ',', '.join(missing)))      

这是:

RuntimeError: Unfulfilled dependency at run time: class2__99914b932b  
   

【问题讨论】:

  • 你用什么命令来运行它?您的run() 方法需要创建LocalTarget 中引用的输出文件才能满足依赖关系。

标签: python luigi


【解决方案1】:

发生这种情况是因为您为 class2 定义了一个输出但从未创建它。

让我们分解一下......

运行时

python file.py class2 --local-scheduler

luigi 会问:

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

但是,运行时

python file.py class1 --local-scheduler

路易吉会:

  • class1 的输出是否已经在磁盘上?没有
  • 检查任务依赖关系:是:class2
  • 暂停检查 class2 的状态
    • class2 的输出是否在磁盘上?没有
    • 运行class2 -> 正在运行 -> 没有错误完成
    • class2 的输出是否在磁盘上? NO -> 引发错误

luigi 永远不会运行一个任务,除非它之前的所有依赖都得到满足。 (即他们的输出在文件系统上)

【讨论】:

  • 很好的解释,但解决方案是什么?
  • 如果class2 没有输出或运行功能,只是需要,会发生什么?
  • @KansaiRobot 解决方案是“class2.run()”应该在磁盘上创建输出。
  • 如果 class2 是依赖于其他任务的顶级任务,您可以简单地覆盖 class2.complete() 方法以始终返回 True(或检查“必需”任务是否已完成。
【解决方案2】:

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

接下来,我设法解决了上一个答案添加到class2

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-17
      • 2011-09-09
      • 2020-01-02
      • 1970-01-01
      • 1970-01-01
      • 2021-12-14
      • 1970-01-01
      相关资源
      最近更新 更多