如何在Luigi中启用动态需求?

时间:2017-03-02 18:30:22

标签: python python-3.x luigi

我在Luigi建立了一个任务管道。由于此管道将在不同的上下文中使用,因此可能需要在管道的开头或末尾包含更多任务,或者甚至在任务之间包含完全不同的依赖关系。

当我想到的时候:"嘿,为什么要在我的配置文件中声明任务之间的依赖关系?",所以我在config.py:

PIPELINE_DEPENDENCIES = {
     "TaskA": [],
     "TaskB": ["TaskA"],
     "TaskC": ["TaskA"],
     "TaskD": ["TaskB", "TaskC"]
}

我对在整个任务中堆积参数感到恼火,所以在某些时候我只引入了一个参数task_config,每个Task都有,并且每个信息或数据都包含在内。存储run()所必需的。所以我把PIPELINE_DEPENDENCIES放在那里。

最后,我会从Task和自定义的Mixin类中定义每个luigi.Task继承,它将实现动态requires(),它看起来像这样:

class TaskRequirementsFromConfigMixin(object):
    task_config = luigi.DictParameter()

    def requires(self):
        required_tasks = self.task_config["PIPELINE_DEPENDENCIES"]
        requirements = [
            self._get_task_cls_from_str(required_task)(task_config=self.task_config)
            for required_task in required_tasks
        ]
        return requirements

    def _get_task_cls_from_str(self, cls_str):
        ...

不幸的是,这不起作用,因为运行管道给了我以下内容:

===== Luigi Execution Summary =====

Scheduled 4 tasks of which:
* 4 were left pending, among these:
    * 4 was not granted run permission by the scheduler:
        - 1 TaskA(...)
        - 1 TaskB(...)
        - 1 TaskC(...)
        - 1 TaskD(...)

Did not run any tasks
This progress looks :| because there were tasks that were not granted run permission by the scheduler

===== Luigi Execution Summary =====

和很多

DEBUG: Not all parameter values are hashable so instance isn't coming from the cache

虽然我不确定这是否相关。

所以: 1.我的错误是什么?它可以修复吗? 2.还有另一种方法可以达到这个目的吗?

0 个答案:

没有答案