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.
Choisir l’authentification
Ces exemples s’exécutent sur une capacité sans serveur, sauf si une section indique CKS. Choisissez l’identifiant d’authentification du compte propriétaire de vos Sandbox. Pour obtenir une clé ou un jeton, consultez Choisir et obtenir des identifiants d’authentification. Exécutez les commandes d’installation dans un environnement virtuel Python actif. Enregistrez le code Python de l’onglet correspondant à votre identifiant d’authentification sous le nomsandbox_auth.py, dans le même répertoire que les scripts Python que vous exécutez depuis cette page. Ce fichier enregistre le mode d’authentification choisi, et non votre identifiant d’authentification. Les exemples importent AUTH depuis ce fichier et le transmettent explicitement à chaque nouvelle Sandbox ou session.
- Clé API Forge
- Jeton d’accès à l’API CoreWeave
Utilisez votre clé API Forge avec la stratégie d’authentification W&B du SDK :
sandbox_auth.py
placement_mode="cks" lors de la création de la Sandbox ou dans SandboxDefaults. Créer une session avec auth=AUTH authentifie également les Sandbox qui lui appartiennent. Utilisez le même identifiant d’authentification pour vous reconnecter aux Sandbox, les lister ou les nettoyer.
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 pour démarrer la sandbox.
exec() attend le statut RUNNING avant de s’exécuter. Pour attendre le démarrage séparément, utilisez
await sandbox et vérifiez son statut avant toute opération.
start()
- Synchrone
- Asynchrone
exec()
- Synchrone
- Asynchrone
read_file()
- Synchrone
- Asynchrone
write_file()
- Synchrone
- Asynchrone
stop()
- Synchrone
- Asynchrone
wait()
wait() attend le statut de démarrage. Par exemple, la méthode peut rendre la main lorsque la sandbox est
RUNNING ou TERMINATING, ou une fois qu’elle s’est terminée avec succès. Elle est sync-only. Dans du code asynchrone,
await sandbox effectue la même attente de démarrage sans bloquer la boucle d’événements.
Un retour normal ne garantit pas l’état RUNNING. Vérifiez status avant toute opération qui nécessite une
sandbox en cours d’exécution. Pour la gestion des états terminaux et des erreurs, consultez
Attendre une sandbox.
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). Pour les Sandbox, elle applique la même attente de démarrage que
Sandbox.wait(), plutôt que d’attendre la fin de la commande principale. Une sandbox présente dans done
n’est pas nécessairement à l’état RUNNING : elle peut par exemple être déjà terminée ou en cours d’arrêt. Vérifiez
le status de chaque sandbox avant toute opération qui exige qu’elle soit en cours d’exécution.
@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.