Luigi:使用构建函数并行化luigi任务时出错

时间:2017-08-11 10:48:35

标签: function build parallel-processing luigi

我正在尝试使用luigi.build方法进行luigi多处理功能。 但是我在执行时遇到了一些库错误。

代表self._add(item,is_complete)中的下一个:   在_add中输入文件“/home/manoj/anaconda2/lib/python2.7/site-packages/luigi/worker.py”,第604行     self._validate_dependency(d)   在_validate_dependency中输入文件“/home/manoj/anaconda2/lib/python2.7/site-packages/luigi/worker.py”,第622行     raise Exception('requires()必须返回Task对象')

这是我试图实现目标的一段代码。

import luigi

class TaskOne(luigi.Task):
    custid= luigi.Parameter() 
    def requires(self):
        pass
    def output(self):
        return luigi.LocalTarget("logs/"+str(self.custid)+"_success")
    def run(self):
        with self.output().open('w') as f:
            f.write("%s\n" % '')
        
               
class TaskTwo(luigi.Task):  
    def requires(self): 
        customersList = ['A','B', 'C', 'D', 'E', 'F', 'G', 'H', 'I']
        yield luigi.build([TaskOne(custid=cust_id) for cust_id in customersList], workers=2)  
    def output(self):
        return luigi.LocalTarget("logs/overall_success.txt")
    def run(self):
        with self.output().open('w') as f:
            f.write("%s\n" % "success")
         
if __name__ == '__main__':
    luigi.run()

=============================================== =========================

1 个答案:

答案 0 :(得分:0)

requires()必须返回luigi.Task对象或luigi.Task对象的列表。但是,luigi.build()不返回任何内容。您不需要调用luigi.build来明确运行任务,因为Luigi会自行处理运行需求。 https://luigi.readthedocs.io/en/stable/tasks.html中概述的示例任务显示了其工作方式的基本范例。

此外,您应该从requires()中省略TaskOne。如果没有依赖项,则无需定义它。