Débogage
Voir les items passer et dessiner le graphe des processus
.debug() s'insère n'importe où dans la chaîne : chaque item qui passe est affiché avec le PID du processus, puis transmis tel quel à l'étape suivante.
Signature
Pipeline.debug() -> Pipeline[InPacket]
Pipeline.wait_for_result(debug_graph: str | None = None)
Pipeline.print_graph(debug_graph: str)python
from olympipe import Pipeline
res = (
Pipeline(range(3))
.task(lambda x: x * 10)
.debug() # affiche chaque item qui passe ici
.task(lambda x: x + 1)
.wait_for_result()
)
print(res)Sortie
DebugPipe[60979] 0
DebugPipe[60979] 10
DebugPipe[60979] 20
[1, 11, 21]Comment ça fonctionne
L'affichage se fait depuis un processus dédié, donc l'ordre des lignes peut s'entremêler avec d'autres print de vos workers.
debug_graph / print_graph : le graphe des processus
Passez debug_graph="nom" à wait_for_result, wait_for_results ou wait_for_completion : pendant l'attente, Olympipe dessine le graphe processus → files et l'écrit dans nom.png, redessiné seulement quand il change. pipeline.print_graph("nom") fait un rendu ponctuel. Il faut le paquet Python graphviz (pip install graphviz) et l'exécutable dot de Graphviz ; sans le paquet, Olympipe affiche un avertissement et continue.
python
from olympipe import Pipeline
res = (
Pipeline(range(100))
.task(lambda x: x + 1, count=2)
.batch(10)
.wait_for_result(debug_graph="pipeline_graph") # écrit pipeline_graph.png
)
print(len(res), "batches")Sortie
10 batches
# Source DOT du graphe rendu (PIDs et identifiants de files variables) :
digraph G {
61224 [label="(61224) TaskPipe[<lambda>]"]
"Q-sGArOhxB" -> 61224
61227 [label="(61227) TaskPipe[<lambda>]"]
"Q-sGArOhxB" -> 61227
61224 -> "Q-PGt4zD9u"
61227 -> "Q-PGt4zD9u"
61230 [label="(61230) BatchPipe[Batch:10]"]
"Q-PGt4zD9u" -> 61230
...
}