在python luigi上安排大量的工作

时间:2017-07-09 21:24:15

标签: python luigi

我编写了一个Luigi管道来提取1.2 mio文件,然后对它们进行一些sed工作 - 请参阅https://gist.github.com/wkerzendorf/395c85a2955002412be302d708329f7f

如果我通过Luigi在几千个文件上运行它,它的安排很好。但是在整个数据集上运行它会引发Failed connecting to remote scheduler。不确定我是否以正确的方式这样做。

1 个答案:

答案 0 :(得分:0)

我建议不要在每个文件超过1k时为每个文件创建一个单独的任务。您可能会更好地创建在这些文件的目录上运行的批处理任务。然后,此任务可以使用多处理来利用对处理函数的并行调用。

from multiprocessing import Pool, cpu_count
import os

class TestTask(luigi.WrapperTask):
    inglob = luigi.Parameter(default='/1002/*.gz')
    outdir = luigi.Parameter(default='/1002-out/')
    tmpdir = luigi.Parameter(default='/1002-tmp/'

    def extract_file(filename):
        # extract file to self.tempdir not shown

    def output(self):
        return luigi.LocalTarget(self.outdir)

    def run(self):
        os.makedirs(self.tempdir)
        p = Pool(cpu_count())
        p.map(extract_file, glob(self.inglob))
        os.rename(self.tempdir, self.outdir)