16

我正在尝试以一种非常简单的方式学习 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  
   
4

3 回答 3

18

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

让我们分解一下...

跑步时

python file.py class2 --local-scheduler

路易吉会问:

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

但是,运行时

python file.py class1 --local-scheduler

路易吉将:

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

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

于 2017-04-10T15:03:25.197 回答
0

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

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

def run(self):
     _out = self.output().open('w')
     _out.write(u"Hello World!\n")
     _out.close()
     print('in class B')
于 2020-09-18T05:32:44.460 回答
0

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

于 2021-02-20T07:27:55.660 回答