【发布时间】:2018-04-23 18:22:51
【问题描述】:
我正在使用 luigi 执行一系列任务,如下所示:
class Task1(luigi.Task):
stuff = luigi.Parameter()
def output(self):
return luigi.LocalTarget('test.json')
def run(self):
with self.output().open('w') as f:
f.write(stuff)
class Task2(luigi.Task):
stuff = luigi.Parameter()
def requires(self):
return Task1(stuff=self.stuff)
def output(self):
return luigi.LocalTarget('something-else.json')
def run(self):
with self.output().open('w') as f:
f.write(stuff)
当我像这样启动整个工作流程时,这完全符合预期:
luigi.build([Task2(stuff='stuff')])
使用luigi.build 时,您还可以通过显式传递参数as per this example in the documentation 来运行多个任务。
但是,在我的情况下,我还希望能够完全独立地运行 Task2 的业务逻辑,而无需它参与工作流。这适用于未实现 requires、as per this example 的任务。
我的问题是,如何将这个方法作为工作流程的一部分运行,或者单独运行?显然,我可以只添加一个新的私有方法,如_my_custom_run,它获取数据并返回结果,然后在run 中使用此方法,但感觉就像是应该融入框架的东西,所以它让我觉得我误解了 Luigi 的最佳实践(仍在学习框架)。感谢您的任何建议,谢谢!
【问题讨论】: