如何使参数可用于所有 Luigi 任务?

How to make a Parameter available to all Luigi Tasks?

Luigi docs中,推荐使用luigi.Configclass进行全局配置。

但是,在使用这样的配置 class 以便将命令行参数传递给管道中的各种任务时,我 运行 遇到了问题。
这是一个轻量级的例子:

import datetime
import luigi


class HelloWorldTask(luigi.Task):

    def run(self):
        print("{task} says: Hello world on {date}!".format(task=self.__class__.__name__,
                                                           date=GlobalParams.date.strftime('%d-%b-%Y')))


class GlobalParams(luigi.Config):
    date = luigi.DateParameter(default=datetime.date.today())


if __name__ == '__main__':
    luigi.run(['HelloWorldTask', '--workers', '1', '--local-scheduler',
               '--GlobalParams-date', '2018-01-01'])

class GlobalParams 定义了一个 DateParameter ,我想稍后在管道任务的 run() 块中引用它。但是,这失败并出现错误, AttributeError: 'DateParameter' object has no attribute 'strftime'

在调试器中,我可以看到一个 DateParameter 对象被传递给 HelloWorldTask 任务,但是任何提取在运行时传递的预期 '2018-01-01' 值的尝试都失败了。

我是否误解了如何使用这些结构?我应该如何将单个参数传递给(可能很多)任务?

示例代码中的问题是 GlobalParams class 在其参数被访问之前未被实例化。
GlobalParams.date.strftime('%d-%b-%Y') 应该读作 GlobalParams().date.strftime('%d-%b-%Y')

这包含在问题中链接的配置文档中,但很容易被忽视。