【问题标题】:Generate luigi config values at runtime (without adding them to parameters of tasks)在运行时生成 luigi 配置值(不将它们添加到任务的参数中)
【发布时间】:2019-11-16 02:56:29
【问题描述】:

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

【问题讨论】:

    标签: python luigi


    【解决方案1】:

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

    【讨论】:

    • 这可能是最好的方法。我只是希望能够覆盖参数的默认值,这样我就不必以与其他参数不同的方式获取某些参数。
    • 在 luigi 任务之间共享同一个对象非常困难,因为它们在不同的进程中运行,但您可以通过将其作为参数传递来做到这一点。
    猜你喜欢
    • 2021-04-24
    • 2020-01-02
    • 2018-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    相关资源
    最近更新 更多