PENDING, moves to CREATING while the container is provisioned, and then enters RUNNING when it is ready for use.
If you start a sandbox with a main command, that command becomes the sandbox’s main process. When the main process exits, the sandbox enters a terminal state such as COMPLETED (exit code 0) or FAILED (an error during startup or execution). A sandbox can also enter TERMINATED if it is stopped externally or exceeds its maximum lifetime.
Sandbox states
The following table summarizes the states of a sandbox:| State | Description |
|---|---|
| PENDING | The sandbox request was accepted and is waiting to be scheduled. |
| CREATING | The container is being provisioned. |
| RUNNING | The sandbox is ready for operations. |
| COMPLETED | The main process exited successfully with code 0. |
| FAILED | The sandbox or its main process encountered an error during startup or execution. |
| TERMINATED | The sandbox was stopped externally or ended because it exceeded its maximum lifetime. |
Wait for readiness or completion
Use different wait methods depending on what you need:- Use
Sandbox.wait()to wait until the sandbox is ready for use. - Use
Sandbox.wait_until_complete()to wait until the sandbox’s main process finishes.
Wait for a sandbox to start
UseSandbox.wait() to explicitly wait for the sandbox to reach the RUNNING state. This is useful for debugging startup problems or when you want to distinguish startup failures from errors in later commands.
For example, the following code creates a sandbox, waits for it to become ready, and then runs a command:
Wait for a sandbox to complete
UseSandbox.wait_until_complete() when the sandbox’s main process represents the full workload and you want to wait for that job to finish.
Sandbox.run("python", "train.py") and want the sandbox lifecycle to match that command’s execution.
When the main process exits, the sandbox enters a terminal state. A successful run typically ends in COMPLETED. If the process fails, the sandbox may enter FAILED.
If you need to run commands interactively instead, use a context manager with Sandbox.exec():
Explicit lifecycle control
Use methods such asSandbox.wait() and Sandbox.stop() when you need explicit control over the sandbox lifecycle.
In most cases, you do not need to call these methods directly. Operations such as Sandbox.exec(), Sandbox.read_file(), and Sandbox.write_file() automatically wait for readiness, and the context manager (with Sandbox.run() as sandbox:) automatically stops the sandbox when the block exits.
Stop a sandbox
UseSandbox.stop() when you no longer need the sandbox, when you want to end a long-running process, or when you need to clean up resources before the sandbox reaches its maximum lifetime.