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:处理程序:应用程序首次运行时未调用完成