cwsandbox) における同期パターンと非同期パターンの選択方法を説明し、一般的な各操作の同期形式と非同期形式を示します。
SDK の内部実装は Async のみです。sync/Async の柔軟性は結果の取得方法によるものです。sync の場合は .result() を、Async の場合は await を使用します。
認証を選択する
これらの例は、セクションで CKS が指定されている場合を除き、サーバーレスキャパシティ上で実行されます。サンドボックスを所有するアカウントの認証情報を選択してください。キーまたはトークンを取得するには、認証情報の選択と取得を参照してください。 インストールコマンドは、有効化した Python 仮想環境内で実行してください。 使用する認証情報のタブにある Python コードを、sandbox_auth.py という名前で、このページで実行する Python スクリプトと同じディレクトリに保存します。このファイルに保存されるのはどの認証方式を使うかという設定のみで、認証情報そのものは含まれません。各例ではこのファイルから AUTH をインポートし、新しいサンドボックスやセッションを作成するたびに明示的に渡します。
- Forge API キー
- CoreWeave API アクセストークン
SDK の W&B 認証方式を使用して、Forge の APIキーで認証します。
sandbox_auth.py
SandboxDefaults で placement_mode="cks" を設定します。auth=AUTH を指定してセッションを作成すると、そのセッションが所有するサンドボックスも認証されます。サンドボックスへの再接続、一覧表示、クリーンアップを行う際も、同じ認証情報を使用してください。
クイック決定ガイド
経験則: シンプルにするために sync パターン (
.result()) を使用してください。すでに async コードベースにいる場合にのみ await に切り替えてください。
Core concept: OperationRef
ほとんどの SDK メソッドはOperationRef[T] を返します。これは .result() 可能かつ await 可能なラッパーです。
どちらのパスも同じ例外を発生させます。
Sandbox.exec() は Process を返します。これは OperationRef[ProcessResult] を拡張し、ストリーミングと stdin をサポートします。
自動開始の動作
session.sandbox() は開始されていないサンドボックスを返します。サンドボックスは、必要となる最初の操作で自動的に開始されます:
自動開始をトリガーするもの: exec(), read_file(), write_file(), wait(), wait_until_complete()
自動開始しないもの: get_status() (送出される例外 SandboxNotRunningError), stop() (開始されていなければ no-op)
オペレーション
サンドボックスを作成する
- 同期
- Async
Sandbox.run() は内部で start().result() を呼び出すため、イベントループをブロックします。
Asyncコードでは Sandbox(...) で構築し、async with を使用してサンドボックスを起動してください。
exec() は RUNNING になるまで待機してから実行します。起動の完了を個別に待機するには、
await sandbox を使用し、操作の前にステータスを確認してください。
start()
- 同期
- Async
exec()
- Sync
- Async
read_file()
- Sync
- Async
write_file()
- Sync
- Async
stop()
- Sync
- Async
wait()
wait() は起動ステータスになるまで待機します。たとえば、サンドボックスが RUNNING または TERMINATING になったとき、あるいは正常に完了した後に制御を返します。このメソッドは同期版のみです。Asyncコードでは、
await sandbox を使用すると、イベントループをブロックせずに同じ起動待機を行えます。
正常に制御が返っても、RUNNING であるとは限りません。実行中のサンドボックスを必要とする操作の前に、status を確認してください。終了状態の処理とエラー処理については、
サンドボックスを待機するを参照してください。
wait_until_complete()
- 同期
- Async
get_status()
get_status() は同期版のみです。API から現在のステータスを取得します。
Sandbox.list()
- 同期
- Async
Sandbox.from_id()
- Sync
- Async
Sandbox.delete()
- 同期
- Async
session.list()
- Sync
- Async
session.from_id()
- Sync
- Async
Stream stdout
- 同期
- Async
stdin をストリーミングする
stdin=True を指定して stdin を有効にします。生のバイトを書き込むには write()、テキスト行を書き込むには writeline() を使用し、
EOF を通知するには close() を使用します。
- Sync
- Async
cwsandbox.results()
cwsandbox.results() は同期版のみのバッチヘルパーです。1つ以上の OperationRef オブジェクトに対して .result() を呼び出します。
cwsandbox.wait()
cwsandbox.wait() は同期版のみです。Sandbox、OperationRef、または Process オブジェクトのシーケンスを待機し、(done, pending) を返します。サンドボックスに対しては、メインコマンドの終了を待つのではなく、Sandbox.wait() と同じ起動待機を行います。done に含まれるサンドボックスが RUNNING であるとは限りません。たとえば、すでに完了している場合や終了処理中の場合があります。実行中であることが必要な操作を行う前に、各サンドボックスの status を確認してください。
@session.function()
- Sync
- Async
並列実行
同期 API は、操作が設計上ノンブロッキングであるため、並列実行をサポートします。exec()、read_file()、write_file() などのメソッドは即座に返ります。.result() を呼び出したときのみブロックします。
Sandbox.run() は、バックエンド が起動リクエストを受け入れるまでブロックします (内部で start().result() を呼び出します) 。並列起動には、session.sandbox() (最初の操作で自動起動) を使用するか、start() の ref を収集します:
Jupyter ノートブック
SDK がデーモンスレッド内で独自のバックグラウンドイベントループを実行するため、 同期 API は Jupyter でnest_asyncio なしで動作します:
await をそのまま使用できます。
エラー処理
同期と非同期のどちらの処理経路でも、同じ例外が送出されます。.result() は基になる操作で発生した例外を
再送出し、await も同様に動作します。例外階層全体と復旧パターンについては、Sandbox SDK の一般的なエラーメッセージの意味
を参照してください。