在运行时生成 luigi 配置值(不将它们添加到任务参数中)

Generate luigi config values at runtime (without adding them to parameters of tasks)

所以,我知道我们可以通过扩展来创建配置 类 luigi.Config,但是有没有办法在运行时生成配置值?

例如,我将如何做这样的事情:

def main():
    new_default_value = fetch_new_default_value()
    config = MyConfigClass()
    config.value = new_default_value
    luigi.build(MyTask())

并让 config.value 保持 new_default_value 的持续时间 执行?另外,是否可以在 requires 的定义中更改它 任务,即在执行期间更改设置值?

config.value 如何与 MyTask 互动?您没有理由不能在您的 Luigi 任务中引用它。

class MyTask(luigi.Task):

    def requires(self):
        new_default_value = fetch_new_default_value()
        return SomeOtherTask(param=new_default_value)

    def run(self):
        config = MyConfigClass()
        # do something that references config attributes

更新:另一种方法是将 config 作为参数传入。

class MyTask(luigi.Task):

    config = luigi.DictParameter()

    def requires(self):
        return SomeOtherTask(param=self.config.value)

    def run(self):
        do_something(self.config.value)

config = MyConfigClass()
config.value = fetch_new_default_value()
job = MyTask(config=vars(config))  # assuming that vars() produces a dict
luigi.build([job])