CWSANDBOX_API_KEY に設定した CoreWeave API アクセストークンを使用します。Forge APIキーによる認証については、はじめにを参照してください。CKS の要件については、配置モードを参照してください。
このガイドでは、CoreWeave サンドボックス Python SDK (cwsandbox) における同期パターンと非同期パターンの選択方法を説明し、一般的な各操作の同期形式と非同期形式を示します。
SDK の内部実装は Async のみです。sync/Async の柔軟性は結果の取得方法によるものです。sync の場合は .result() を、Async の場合は await を使用します。
クイック決定ガイド
経験則: シンプルにするために 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)
オペレーション
サンドボックスを作成する
- Sync
- Async
Sandbox.run() は内部で start().result() を呼び出すため、イベントループをブロックします。
非同期コードでは Sandbox(...) で構築し、async with または await sandbox を使用して
RUNNING ステータスに到達してください。ブロックは発生しません。start()
- Sync
- Async
exec()
- Sync
- Async
read_file()
- Sync
- Async
write_file()
- Sync
- Async
stop()
- Sync
- Async
wait()
wait() はサンドボックスが RUNNING ステータスに到達するまでブロックします。これは Sync 版のみです。ブロッキングが意図されているためです。async コードでは、await sandbox で同じことを実現できます。
wait_until_complete()
- Sync
- Async
get_status()
get_status() は同期版のみです。API から現在のステータスを取得します。
Sandbox.list()
- 同期
- Async
Sandbox.from_id()
- Sync
- Async
Sandbox.delete()
- Sync
- 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) を返します。サンドボックスは RUNNING ステータスに到達したときに解決され、完了時には解決されません。
@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 の一般的なエラーメッセージの意味
を参照してください。