Wie Loops in Knime debuggen und Fortschritt überwachen?
Führen Knime Loops zu schwer nachvollziehbaren Fehlern? Stockt der Fortschritt von Loops plötzlich oder wird sehr langsam?
Top Sektion #1
Java Code Snipped konfigurieren
Top Sektion #2
Java Snippet erklärt
Top Sektion #3
Zusammenfassung & Download
Warum den Loop-Fortschritt in der Knime Konsole ausgeben?
Das Protokollieren des Schleifenfortschritts bietet mehrere Vorteile:
- Verbesserte Überwachung: Sehen Sie genau, an welchem Punkt sich der Prozess befindet, ohne auf den Abschluss warten zu müssen.
- Fehlersuche: Identifizieren Sie leicht potenzielle Engpässe oder Schleifen, die unendlich laufen.
- Nutzerfreundlichkeit: Wenn mehrere Benutzer auf den Workflow angewiesen sind, bietet ein Fortschrittsbalken Sicherheit, dass die Verarbeitung noch im Gange ist auch ohne den Workflow zu kennen.
Einrichtung des Java Snippet Knime Node
In diesem Beispiel verwenden wir einen Java Snippet-Node, um einen konsolenbasierten Fortschrittsbalken zu erstellen, der bei jeder Iteration der Schleife aktualisiert wird.
Das Ziel ist es, sowohl den abgeschlossenen Prozentsatz als auch eine visuelle Darstellung in Form eines Balkens anzuzeigen, um die Überwachung zu erleichtern.
Hier ist der Code für die Implementierung des Fortschrittsbalkens:
Java Code Beispiel
int progressPercentage = (int) (((v_currentIteration + 1) / (double) v_maxIterations) * 100); StringBuilder progressBar = new StringBuilder("["); int totalBars = 20; // Number of segments in the progress bar int completedBars = (progressPercentage * totalBars) / 100; // Add completed segments for (int i = 0; i < completedBars; i++) { progressBar.append("\\u2588"); } // Add remaining segments for (int i = completedBars; i < totalBars; i++) { progressBar.append("\\u2591"); } progressBar.append("]"); // Log the warning with the progress logWarn( "\\n\\n\\n\\n\\n\\n/****************************************\\n/****************************************\\n/****************************************" + "\\n/************ New Iteration *************" + "\\n/****************************************\\n" + "Workflow Name: " + v_WorkflowName + "\\n" + "Workflow Dir: " + v_WorkflowDir + "\\n\\n" + "Archive Destination: " + v_ArchiveDestination + "\\n\\n" + "Iteration: " + v_currentIteration + " // Total Iterations: " + v_maxIterations + "\\n" + "Progress: " + progressPercentage + "% " + progressBar.toString() + "\\n\\n\\n" );
Erklärung des Java-Codes zum Loop-Debugging und Monitoring des Fortschritts
- Der Fortschrittsprozentsatz wird berechnet, indem die aktuelle Iteration (
v_currentIteration
) durch die Gesamtanzahl der Iterationen (v_maxIterations
) geteilt und mit 100 multipliziert wird.
- Mit einem
StringBuilder
wird der visuelle Balken erstellt. totalBars
definiert die Anzahl der Segmente im Balken (in diesem Beispiel 20).completedBars
berechnet, wie viele Segmente basierend auf dem aktuellen Fortschrittsprozentsatz als „abgeschlossen“ angezeigt werden sollen.
- Mithilfe einer Schleife wird das Zeichen
█
(U+2588) für abgeschlossene Segmente hinzugefügt. - Die verbleibenden Segmente werden mit
░
(U+2591) gefüllt, um den noch offenen Fortschritt anzuzeigen.
- Die Funktion
logWarn
gibt die Fortschrittsinformationen in der KNIME-Konsole aus, einschließlich der Details zum aktuellen Workflow, des Archivziels, der Iterationsnummer und des erstellten Fortschrittsbalkens.
Beispiel für Knime-Konsolenausgabe
- Den Workflow-Namen und das Verzeichnis.
- Das Archivziel.
- Die aktuelle Iteration und die Gesamtanzahl der Iterationen.
- Den Fortschrittsprozentsatz mit einem visuellen Fortschrittsbalken.
Hier ist ein Beispiel dafür, wie die Konsolenausgabe aussehen könnte:
/**************************************** /**************************************** /**************************************** /************ New Iteration ************* /**************************************** Workflow Name: XX - Crawl Knime Forum Workflow Dir: E:/Knime-Workspace/Knime Forum Support/XX - Crawl Knime Forum Archive Destination: E:/Knime-Backup/XX - Backup Knime Workspace/data/Data-Included-Yes/Knime-Workspace.7z Iteration: 131 // Total Iterations: 160 Progress: 81% [████████████████░░░░]
Zusammenfassung & Download
Durch die Implementierung dieser Methode kann man in KNIME-Workflows eine benutzerfreundliche Erfahrung bieten, mit klaren Einblicken in den aktuellen Verarbeitungsstatus.