我编写了一个Luigi管道来提取1.2 mio文件,然后对它们进行一些sed工作 - 请参阅https://gist.github.com/wkerzendorf/395c85a2955002412be302d708329f7f。
如果我通过Luigi在几千个文件上运行它,它的安排很好。但是在整个数据集上运行它会引发Failed connecting to remote scheduler
。不确定我是否以正确的方式这样做。
答案 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)