Estoy tratando de aprender de una manera muy sencilla cómo funciona luigi. Como un novato se me ocurrió este código
import luigi class class1(luigi.Task): def requires(self): return class2() def output(self): return luigi.LocalTarget('class1.txt') def run(self): print 'IN class A' class class2(luigi.Task): def requires(self): return [] def output(self): return luigi.LocalTarget('class2.txt') if __name__ == '__main__': luigi.run()Ejecutar esto en el símbolo del sistema da un error que dice
raise RuntimeError('Unfulfilled %s at run time: %s' % (deps, ',', '.join(missing)))cual es:
RuntimeError: Unfulfilled dependency at run time: class2__99914b932bEsto sucede porque define una salida para class2 pero nunca la crea.
Vamos a desglosarlo...
al correr
python file.py class2 --local-schedulerluigi preguntará:
class2 ya está en el disco? NOclass2 : NINGUNArun (por defecto es un pass de método vacío)Sin embargo, al ejecutar
python file.py class1 --local-schedulerLuis hará:
class1 ya está en el disco? NOclass2class2 en el disco? NOclass2 -> ejecutando -> hecho sin erroresclass2 en el disco? NO -> error de subidaluigi nunca ejecuta una tarea a menos que se cumplan todas sus dependencias anteriores. (es decir, su salida está en el sistema de archivos)
También soy un principiante en luigi. Gracias por señalar este tipo de errores.
Siguiendo, la respuesta anterior logré resolverla agregando a class2
def run(self): _out = self.output().open('w') _out.write(u"Hello World!\n") _out.close() print('in class B')Este error viene porque si obtiene la salida que nunca se creará. ex. si la carpeta de salida se crea por marca de tiempo. cambio de marca de tiempo en cada segundo por lo que nunca será el mismo. por lo que el error podría venir.