Datatoy Logo

Split & Gather

Branchez votre pipeline en flux indépendants, fusionnez-les après

`.split(fn, n=2)` route chaque item vers 0 à N branches selon la valeur retournée par `fn`. `.gather(*pipes)` fusionne N pipelines en un seul flux. Idéal pour traiter différentes catégories d'items avec des logiques distinctes.

python
from typing import Optional, Tuple
from olympipe import Pipeline

def route_by_type(item: dict) -> Tuple[Optional[dict], Optional[dict]]:
    if item["type"] == "image":
        return (item, None)   # → branche images
    return (None, item)       # → branche textes

images, texts = Pipeline(mixed_dataset).split(route_by_type, n=2)

results = (
    images.task(process_image, count=4)   # pipeline images
          .gather(texts.task(process_text, count=2))  # + pipeline textes
          .wait_for_result()
)

Performance

5 000 items mixtes, traitement différencié

Séquentiel unifié 15.0s
Split 2 branches 4.0s
🚀 3.8× plus rapide

Comment ça fonctionne

Chaque branche est un `Pipeline` indépendant avec sa propre file. `None` dans la valeur de retour signifie « ne pas envoyer sur cette branche ». `gather` crée un `GatherPipe` qui consomme N files en round-robin.

Exemples liés