Cache disque
Rejouer une étape coûteuse sans recalculer
`.cached_task(fn, cache_dir=...)` calcule `fn(x)` et sérialise le résultat en `.pkl` avec une clé SHA-256 de l'input. Au prochain run, si la clé existe, le résultat est lu depuis le disque — la fonction n'est jamais appelée.
python
import tempfile
from olympipe import Pipeline
def expensive_transform(x: int) -> dict:
time.sleep(0.5) # simulation calcul lourd
return {"value": x ** 3, "meta": compute_stats(x)}
with tempfile.TemporaryDirectory() as cache_dir:
# 1er run : calcule et persiste sur disque
results = (
Pipeline(range(1000))
.cached_task(expensive_transform, cache_dir=cache_dir)
.uncache()
.wait_for_result()
)
# ~500s
# 2ème run : lecture disque uniquement
results_again = (
Pipeline(range(1000))
.cached_task(expensive_transform, cache_dir=cache_dir)
.uncache()
.wait_for_result()
)
# < 2s⚡ Performance
1 000 items, calcul 0.5s/item
Premier run 8.3min
Deuxième run (cache) 1.8s
🚀 277.8× plus rapide
Comment ça fonctionne
La clé est le SHA-256 du pickle de l'input. Les fichiers sont stockés dans `cache_dir/<step_hash[:16]>/<key>.pkl`. Compatible avec les pipelines à plusieurs étapes : chaque étape a son propre sous-dossier de cache.
