首页 > 解决方案 > 在运行时生成 luigi 配置值(不将它们添加到任务的参数中)

问题描述

所以,我知道我们可以通过扩展来创建配置类 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 吗?另外,是否可以在任务的需求定义中更改它,即在执行期间更改设置值?

标签: pythonluigi

解决方案


怎么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])

推荐阅读