CWSANDBOX_API_KEY. Pour l’authentification par clé API Forge, voir Premiers pas. Pour les exigences relatives à CKS, voir Modes de placement.
Ce guide vous aide à choisir entre les modèles synchrones et asynchrones dans le SDK Python de sandbox CoreWeave (cwsandbox) et présente les variantes synchrone et asynchrone de chaque opération courante.
En interne, le SDK repose sur une implémentation asynchrone unique. Le choix entre synchrone et asynchrone tient uniquement à la manière dont vous consommez les résultats : utilisez .result() en mode synchrone et await en mode asynchrone.
Guide de décision rapide
Règle générale : privilégiez l’approche synchrone (
.result()) pour plus de simplicité. Ne passez à await que si vous travaillez déjà
dans une base de code asynchrone.
Concept fondamental : OperationRef
La plupart des méthodes du SDK renvoientOperationRef[T], un encapsuleur qui prend en charge à la fois l’appel à .result() et await.
Les deux approches lèvent les mêmes exceptions.
Sandbox.exec() renvoie Process, qui étend OperationRef[ProcessResult] en y ajoutant la diffusion en continu
et stdin.
Comportement de démarrage automatique
session.sandbox() renvoie une sandbox non démarrée. La sandbox démarre automatiquement lors de la première opération
qui la nécessite :
Déclenchent le démarrage automatique : exec(), read_file(), write_file(), wait(), wait_until_complete()
Ne déclenchent pas le démarrage automatique : get_status() (lève SandboxNotRunningError), stop() (no-op si la sandbox n’a jamais démarré)
Opérations
Créer des Sandbox
- Synchrone
- Asynchrone
Sandbox.run() appelle start().result() en interne, ce qui bloque la boucle d’événements.
Dans du code asynchrone, instanciez l’objet avec Sandbox(...) et utilisez async with ou await sandbox
pour atteindre le statut RUNNING sans bloquer l’exécution.start()
- Synchrone
- Asynchrone
exec()
- Synchrone
- Asynchrone
read_file()
- Synchrone
- Asynchrone
write_file()
- Synchrone
- Asynchrone
stop()
- Synchrone
- Asynchrone
wait()
wait() bloque l’exécution jusqu’à ce que la sandbox atteigne le statut RUNNING. Cette méthode est sync-only, car le blocage est
précisément le but recherché. Dans du code asynchrone, await sandbox produit le même effet.
wait_until_complete()
- Synchrone
- Asynchrone
get_status()
get_status() est sync-only. Cette méthode récupère le statut actuel auprès de l’API.
Sandbox.list()
- Synchrone
- Asynchrone
Sandbox.from_id()
- Synchrone
- Asynchrone
Sandbox.delete()
- Synchrone
- Asynchrone
session.list()
- Synchrone
- Asynchrone
session.from_id()
- Synchrone
- Asynchrone
Diffuser la sortie stdout en continu
- Synchrone
- Asynchrone
Transmettre stdin en flux
Activez stdin avecstdin=True. Utilisez write() pour les octets bruts, writeline() pour les lignes de texte
et close() pour signaler la fin de fichier (EOF).
- Synchrone
- Asynchrone
cwsandbox.results()
cwsandbox.results() est un utilitaire de traitement par lot sync-only. Il appelle .result() sur un ou plusieurs objets OperationRef.
cwsandbox.wait()
cwsandbox.wait() est sync-only. Cette fonction attend une séquence d’objets Sandbox, OperationRef ou Process
et renvoie (done, pending). Une Sandbox est résolue dès qu’elle atteint le statut RUNNING, et non à son
achèvement.
@session.function()
- Synchrone
- Asynchrone
Exécution parallèle
L’API synchrone prend en charge l’exécution parallèle, car les opérations sont non-blocking dès la conception. Les méthodes telles queexec(), read_file() et write_file() rendent la main immédiatement. Le blocage n’intervient que lorsque vous appelez
.result().
Sandbox.run() reste bloquante jusqu’à ce que le backend accepte la requête de démarrage (elle appelle start().result()
en interne). Pour un démarrage parallèle, utilisez session.sandbox() (démarrage automatique à la première opération) ou
collectez les réf. renvoyées par start() :
Notebooks Jupyter
L’API synchrone fonctionne dans Jupyter sansnest_asyncio, car le SDK exécute sa propre boucle d’événements
en arrière-plan dans un thread démon :
await directement, car Jupyter dispose d’une boucle d’événements intégrée :
Gestion des erreurs
Les modes synchrone et asynchrone lèvent les mêmes exceptions..result() relance toute exception
issue de l’opération sous-jacente, tout comme await. Consultez Que signifient les messages d’erreur courants du SDK Sandbox ?
pour connaître la hiérarchie complète des exceptions et les stratégies de récupération.