J'ai écrit un article "Pour améliorer la réutilisabilité et la maintenabilité des workflows créés avec Luigi" (http://qiita.com/ngr_t/items/b928bc13457571e25519). Parmi eux, [vérifiez les horodatages d'entrée / sortie dans la méthode complète](http://qiita.com/ngr_t/items/b928bc13457571e25519#complete-%E3%83%A1%E3] pour maintenir la cohérence du résultat. % 82% BD% E3% 83% 83% E3% 83% 89% E3% 81% A7% E3% 81% AF% E5% 85% A5% E5% 87% BA% E5% 8A% 9B% E3% 81 % AE% E3% 82% BF% E3% 82% A4% E3% 83% A0% E3% 82% B9% E3% 82% BF% E3% 83% B3% E3% 83% 97% E3% 82% 92 % E3% 83% 81% E3% 82% A7% E3% 83% 83% E3% 82% AF% E3% 81% 99% E3% 82% 8B) ou [complete renvoie toutes les vraies tâches dépendantes Vérifiez si](http://qiita.com/ngr_t/items/b928bc13457571e25519#complete-%E3%81%A7%E3%81%AF%E4%BE%9D%E5%AD%98%E3%82 % BF% E3% 82% B9% E3% 82% AF% E3% 81% AE-complet-% E3% 81% 8C% E3% 81% 99% E3% 81% B9% E3% 81% A6-vrai- % E3% 82% 92% E8% BF% 94% E3% 81% 99% E3% 81% 8B% E3% 82% 92% E3% 83% 81% E3% 82% A7% E3% 83% 83% E3 J'ai écrit sur l'importance de dire% 82% AF% E3% 81% 99% E3% 82% 8B).
Par défaut, Luigi détermine uniquement la fin d'une tâche "s'il y a ou non une sortie", ce qui n'est pas pratique du point de vue de produire des résultats de calcul cohérents, veuillez donc noter les points ci-dessus. Vous devrez payer. Pour cette raison, j'ai essayé de faire une extension de "Task" "pour la science des données" en mettant davantage l'accent sur la reproductibilité des résultats. Il se trouve dans le référentiel suivant.
https://github.com/ngr-t/luigi_for_data_science
Je n'ai pas écrit de script de configuration, mais cela dépend actuellement du module Portalocker (et bien sûr de Luigi), alors insérez-le simplement.
Une saucisse
hash_checking_tasks.TaskWithCheckingInputHash
.hash_checking_tasks.HashableTarget
.Ce sera.
TaskWithCheckingInputHash
étend Task
comme suit:
complete ()
de toutes les tâches dépendantes renvoie True
.
--Si une cible existe, vérifiez si la tâche utilisée pour générer cette cible correspond à la valeur de hachage de la cible d'entrée.Le traitement tel que la génération de valeurs de hachage spécifiques est laissé à «HashableTarget». HashableTarget
est implémenté de manière à pouvoir effectuer les opérations suivantes.
hash_content ()
.get_current_input_hash ()
.store_input_hash ()
.J'ai écrit dans un article précédent que "vérifier l'horodatage", mais ce qui est important ce n'est pas la date mais l'équivalence des entrées et sorties. N'est-il pas préférable de vérifier la valeur de hachage? J'ai reconsidéré cela après avoir écrit cet article.
Cependant, lorsqu'il s'agit de vérifier la valeur de hachage, il est inévitablement nécessaire de conserver la valeur de hachage quelque part, ce qui est un problème légèrement compliqué. HashableLoaclTarget
enregistre le fichier cible dans le chemin avec le suffixe" input.pickle ", mais il ne gère pas le cas où ce nom est en conflit.
Je pense qu'il y a encore beaucoup de choses à faire, alors jetez Masakari par tous les moyens.