Datatoy Logo

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
	...
}