Skip to main content
このガイドでは、サンドボックスのリソース管理とクリーンアップ戦略について説明します。信頼できるクリーンアップにより、スクリプト終了後に孤立したサンドボックスが発生するのを防ぎ、コストを予測可能に保ち、意図しないコンピュートリソースの使用を回避できます。ここで紹介するパターンは、明示的なセッションの有無にかかわらず、1 つまたは複数のサンドボックスを作成するスクリプトに適用されます。

認証を選択する

セクション内で CKS が指定されていない限り、これらの例はサーバーレスキャパシティ上で実行されます。サンドボックスを所有するアカウントの認証情報を選択してください。キーまたはトークンを取得するには、認証情報の選択と取得を参照してください。 インストールコマンドは、有効化した Python 仮想環境で実行してください。 使用する認証情報のタブにある Python コードを sandbox_auth.py という名前で、このページで実行する Python スクリプトと同じディレクトリに保存します。このファイルに保存されるのは認証方式の選択であり、認証情報そのものではありません。各例ではこのファイルから AUTH をインポートし、新しいサンドボックスやセッションを作成するたびに明示的に渡します。
SDK の W&B 認証方式を使用して、Forge APIキーで認証します。
sandbox_auth.py
CKS に配置する場合は、CoreWeave トークンを選択し、ランナーを有効化したうえで、サンドボックスの作成時または SandboxDefaults で placement_mode="cks" を設定します。auth=AUTH を指定してセッションを作成すると、そのセッションが所有するサンドボックスも認証されます。サンドボックスへの再接続、一覧表示、クリーンアップを行う際も、同じ認証情報を使用してください。

自動クリーンアップ

自動クリーンアップは、サンドボックスの有効期間をPythonのコンテキストマネージャー、またはプロセスの終了時にSDKが閉じるSessionに結び付けます。SDKは明示的な stop() 呼び出しなしにリソースを解放します。 Sessionやコンテキストマネージャーの外で Sandbox.run() を使用して開始したサンドボックスは、スクリプトの終了後も実行され続けることがあります。サンドボックスは、メインコマンドが正常に終了した場合 (終了ステータス 0)、ユーザーが停止した場合、または最大ライフタイムに達した場合に停止します。0 以外の終了ステータスで終了すると、コンテナーの自動再起動がトリガーされることがあります。再起動の上限に達すると、サンドボックスは失敗します。詳細は メインコマンドの有効期間 を参照してください。 コンテキストマネージャーは、囲まれたコードが例外を送出する場合でもクリーンアップを保証するため、推奨されるパターンです。SDK はコンテキストが終了するとサンドボックスを停止します:
セッション はすべてのサンドボックスをクリーンアップします:

グローバルなクリーンアップハンドラ

SDK は、プロセスの終了時に、登録済みのSessionが所有するサンドボックスを停止するクリーンアップハンドラを登録します。Sessionやコンテキストマネージャーを使わずに作成したスタンドアロンのサンドボックスは、明示的にクリーンアップする必要があります。 SDK は、コードで最初にサンドボックスを作成した時点でこれらのハンドラをインストールします。SIGINT と SIGTERM のハンドラは、Python のメインスレッドから実行された場合にのみインストールされます。 アプリケーションで独自にシグナルを処理している場合は、最初のサンドボックスを作成する前に cwsandbox.disable_signal_handlers() を呼び出すか、CWSANDBOX_DISABLE_SIGNAL_HANDLERS=1 を設定してください。この場合も atexit ハンドラは実行されますが、シグナル受信時にはアプリケーション側でサンドボックスを停止する必要があります。

手動クリーンアップ

サンドボックスまたはセッションをいつリリースするかを明示的に制御する必要がある場合に、手動クリーンアップを使用します。手動クリーンアップでは、停止オプションを渡したり、長時間実行されるコード全体でクリーンアップを調整したりできます。

サンドボックス stop()

次の例では、個別のサンドボックスを停止する方法と、停止時に指定できる省略可能なパラメーターを示します。

Session close()

Session を閉じると、その Session が所有するサンドボックスがすべて停止します。

バッチのクリーンアップ

次の例では、複数のサンドボックスを並列で停止します。

孤立したサンドボックス management

孤立したサンドボックスとは、作成したプロセスの終了後も意図せず実行され続けているサンドボックスです。意図的に実行し続けているスタンドアロンのサンドボックスは孤立したサンドボックスではありませんが、その所在を把握できなくなると孤立したサンドボックスになります。以下のセクションでは、孤立したサンドボックスを検索しやすくする方法、孤立したサンドボックスをクエリする方法、および管理されたクリーンアップの下に戻す方法について説明します。

ディスカバリーのためのタグ付け

タグ を使用して、後で孤立したサンドボックスを発見できるようにします。Sessionやコンテキストマネージャー内のサンドボックスは、SDK の自動クリーンアップによって、ほとんどの場合孤立せずに済みます。ただし、強制シャットダウン (kill -9) やネットワーク障害が発生した後は、これらのサンドボックスも実行され続けることがあります。また、クリーンアップハンドラはスタンドアロンのサンドボックスを停止しないため、停止し忘れると孤立したサンドボックスになります。
サンドボックスを見つけやすくするには、次のタグを使用します:
  • project またはアプリケーション名 (my-project)
  • ジョブまたはrunの識別子 (batch-job-123, run-2024-01-15)
  • 環境 (dev, staging, prod)

孤立したサンドボックスを検索する

タグでクエリして、以前の run からサンドボックスを検索します:

セッションの取り込み

孤立したサンドボックス を取り込むと、それをセッションにアタッチし、セッションがその有効期間を管理します。その後、孤立したサンドボックス は新しく作成されたサンドボックスと同じ自動クリーンアップ保証を受けます。session.list() はセッションのデフォルトのタグをフィルターに追加するため、それらのタグが付いたサンドボックスのみが検索されます。セッションのタグを適用せずに検索するには、Sessions ガイドにあるように、Sandbox.list() を使用して、取得した各サンドボックスを取り込みます:

ID を指定して停止する

以前のrun時に ID を保存しておいたサンドボックスを停止するには、同じ認証情報で再接続します。[SANDBOX-ID] をサンドボックス ID に置き換えてください。
停止リクエストを送る前にサンドボックスが消失していた場合は、missing_ok=True オプションによって SandboxNotFoundError が抑制されます。ただし、Sandbox.from_id() によるルックアップの失敗は抑制されません。サンドボックスがすでに存在しない場合、この呼び出しでは引き続き SandboxNotFoundError が送出されます。

Delete by ID

graceful_shutdown_seconds や snapshot_on_stop などのオプションを使用するには、サンドボックスのインスタンスに対して stop() を呼び出します。Sandbox.delete() はインスタンスを作成せず、ID を指定して直接削除します。 サンドボックスの ID をすでに知っている場合は、まず list したり取り込んだりせずに削除できます:
最終更新日 2026年11月4日