6
votes

Manipulation des événements à Python Luigi

J'essaie d'intégrer Luigi comme gestionnaire de flux de travail. Nous utilisons actuellement un concours, mais bon nombre des choses que nous essayons de faire est un problème pour se déplacer dans le concours afin de nous faire passer à Luigi comme responsable de dépendance. Aucun problème jusqu'à présent, les flux de travail déclenchent et exécutent correctement.

Le problème se concrétise lorsqu'une tâche échoue à quelque raison que ce soit. Ce cas spécifiquement le bloc requiert une tâche, mais tous les cas doivent être pris en charge. À l'heure actuelle, Luigi prend parfaitement soin de l'erreur et l'écrit à Stdout. Il émet toujours et sort du code 0 cependant, ce qui signifie que le travail est passé. Un faux positif.

J'essaie d'obtenir la manipulation de l'événement pour résoudre ce problème, mais je ne peux pas l'obtenir pour déclencher, même avec un travail extrêmement simple: xxx

Ensuite, exécutez la commande dans la coquille Python

luigi.run (main_task_cls = test, local_scheduler = true)

L'exception est surélevée, mais même 't tire ou quelque chose. Le fichier n'était pas écrit et que le code de sortie est toujours 0.

Aussi, si cela fait une différence, j'ai mon configuration Luigi à /etc/luigi/client.cfg qui contient < Pré> xxx

Je suis à perte de la raison pour laquelle le gestionnaire d'événements ne déclenche pas, mais j'ai besoin d'une manière ou d'une autre que j'ai besoin du processus pour échouer sur une erreur.


1 commentaires

Hmm Je ne suis pas trop sûr de savoir comment utiliser Luigi, mais vous aurez essentiellement besoin d'un code de sortie non nuls lorsque les tests échouent ... Le flux d'événements du concours est assez simple. 1. Exécutez le script spécifié dans votre tâche.yml 2. Allez green ou rouge sur la base du code de sortie du script.


3 Réponses :


3
votes

On dirait que le problème est l'endroit où vous placez l'appel «Soulevez Exception». Si vous le placez dans la fonction requis - il fonctionne essentiellement avant la méthode de votre tâche de test. Donc, ce n'est pas comme si votre tâche de test a échoué, mais la tâche dépend de (maintenant, vide ...).

Par exemple si vous déplacez la relance à exécuter, votre code se comportera comme vous vous comptez.

    def run(self):
       print('start')
       raise Exception()


0 commentaires

0
votes

Si je le comprends correctement, vous voulez juste que Luigi retourne un code d'erreur lorsqu'une tâche échoue, j'ai eu de nombreux problèmes avec celui-ci, mais il s'avère être assez simple, il vous suffit de l'exécuter avec Luigi sur le ligne de commande, pas avec python. Comme ceci:

luigi -module my_module mytask

Je ne sais pas si c'était votre problème aussi, mais je courais avec Python, puis Luigi ignora les retors sur le Luigi.cfg. J'espère que cela aide.


0 commentaires

1
votes

Si vous souhaitez attraper des exceptions dans nécessite () , utilisez ce qui suit: xxx


0 commentaires