Luigi - 平行分支
Luigi - parallel branches
我是 Luigi 的新手,我已经遇到了似乎无法解决的问题。
所以假设我想要这样的东西:
所以基本上我的问题是:如何为我想要的多个实例多次调用一个任务,甚至继续以相同的方式向每个 "branch".
添加其他任务
我知道它应该与 requires()
函数一起使用,例如通过 return [list of Task for x in range(10)]
或类似的东西。但是我找不到正确的语法/方法。
希望有人能帮助我,我将不胜感激!!
提前致以最诚挚的问候和感谢
任务的唯一性由输出路径决定。如果输出路径相同,则任务相同。因此,您可以做的是使用不同的输出路径创建相同 class 的多个实例。
在 Luigi 中执行此操作的推荐方法是向您的任务添加一个参数 class 并在构建输出路径时使用此参数。
例如,
class TaskA(luigi.Task):
number = luigi.IntParameter()
def output():
base_path = 'path/to/a/dir'
file_name = '%5.5d.txt' % self.number
return LocalTarget(os.path.join(base_path, file_name))
现在您可以通过以下方式在另一个任务中多次调用此任务:
class TaskB(luigi.Task):
def requires():
return [TaskA(i) for i in range(n)]
请注意,您第二次 运行 TaskB
它对 TaskA
1 到 n 的要求已经满足。如果你总是想再次执行 TaskA
你应该在它的输出路径中添加一些随机性。
我是 Luigi 的新手,我已经遇到了似乎无法解决的问题。
所以假设我想要这样的东西:
我知道它应该与 requires()
函数一起使用,例如通过 return [list of Task for x in range(10)]
或类似的东西。但是我找不到正确的语法/方法。
希望有人能帮助我,我将不胜感激!!
提前致以最诚挚的问候和感谢
任务的唯一性由输出路径决定。如果输出路径相同,则任务相同。因此,您可以做的是使用不同的输出路径创建相同 class 的多个实例。
在 Luigi 中执行此操作的推荐方法是向您的任务添加一个参数 class 并在构建输出路径时使用此参数。
例如,
class TaskA(luigi.Task):
number = luigi.IntParameter()
def output():
base_path = 'path/to/a/dir'
file_name = '%5.5d.txt' % self.number
return LocalTarget(os.path.join(base_path, file_name))
现在您可以通过以下方式在另一个任务中多次调用此任务:
class TaskB(luigi.Task):
def requires():
return [TaskA(i) for i in range(n)]
请注意,您第二次 运行 TaskB
它对 TaskA
1 到 n 的要求已经满足。如果你总是想再次执行 TaskA
你应该在它的输出路径中添加一些随机性。