Luigi - 运行时未完成 %s

Posted

技术标签:

【中文标题】Luigi - 运行时未完成 %s【英文标题】:Luigi - Unfulfilled %s at run time 【发布时间】: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 中引用的输出文件才能满足依赖关系。 【参考方案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】:

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

【讨论】:

以上是关于Luigi - 运行时未完成 %s的主要内容,如果未能解决你的问题,请参考以下文章

Luigi 没有接下一个要运行的任务,剩下一堆待处理的任务,没有失败的任务

从 cmd 运行 Luigi 任务 - “没有名为任务的模块”

FBSDKLoginManager logInWithReadPermissions:fromViewController:处理程序:应用程序首次运行时未调用完成

后台任务运行时未调用 iOS applicationWillEnterForeground 和黑屏

Luigi 未能完成 require 方法中列出的所有任务

Typescript 路径别名在运行时未正确解析