【发布时间】:2018-07-08 14:38:51
【问题描述】:
在Luigi docs 中,建议使用luigi.Config 类进行全局配置。
但是,在使用这样的配置类以将命令行参数传递给管道中的各种任务时,我遇到了问题。
这是一个轻量级的例子:
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'])
GlobalParams 类定义了一个DateParameter,我想稍后在管道任务的run() 块中引用它。但是,这会因错误而失败,
AttributeError: 'DateParameter' object has no attribute 'strftime'。
在调试器中,我可以看到 DateParameter 对象已传递给 HelloWorldTask 任务,但任何尝试提取在运行时传递的预期 '2018-01-01' 值的尝试都失败了。
我是否误解了如何使用这些构造?我应该如何将单个参数传递给(可能很多)任务?
【问题讨论】:
-
这样访问默认值:
GlobalParams.date._default.strftime('%d-%b-%Y') -
这只能访问参数定义中给出的默认值。我想在运行时访问传递给参数的日期(
'2018-01-01')。