PENDING で開始し、コンテナーのプロビジョニング中に CREATING に移行し、使用可能になると RUNNING になります。
メインコマンドを指定して サンドボックス を起動した場合、そのコマンドが サンドボックス のメインプロセスになります。メインプロセスが終了すると、サンドボックスは COMPLETED (終了コード 0) や FAILED (起動時または実行中のエラー) などの終了状態に入ります。また、外部から停止された場合や最大存続時間を超えた場合には、TERMINATED になることもあります。
サンドボックスの状態
| State | Description |
|---|---|
| PENDING | サンドボックスのリクエストは受理され、スケジュールされるのを待っている状態です。 |
| CREATING | コンテナーをプロビジョニングしています。 |
| RUNNING | サンドボックスで操作を実行できる状態です。 |
| COMPLETED | メインプロセスが終了コード 0 で正常に終了しました。 |
| FAILED | サンドボックスまたはそのメインプロセスで、起動中または実行中にエラーが発生しました。 |
| TERMINATED | サンドボックスは外部から停止されたか、最大存続時間を超えたため終了しました。 |
準備完了または完了まで待機する
Sandbox.wait()を使用して、サンドボックスが使用可能な状態になるまで待機します。Sandbox.wait_until_complete()を使用して、サンドボックスのメインプロセスが終了するまで待機します。
サンドボックスの起動を待つ
Sandbox.wait() を使用すると、サンドボックスが RUNNING 状態になるまで明示的に待機できます。これは、起動時の問題をデバッグする場合や、起動の失敗と後続のコマンドで発生するエラーを区別したい場合に役立ちます。
たとえば、次のコードでは、サンドボックスを作成し、準備完了になるまで待機してからコマンドを実行します。
サンドボックスの完了を待機する
Sandbox.wait_until_complete() を使用します。
Sandbox.run("python", "train.py") のようなメインコマンドでサンドボックスを開始し、そのサンドボックスのライフサイクルをそのコマンドの実行に合わせたい場合に便利です。
メインプロセスが終了すると、サンドボックスは終了状態に入ります。成功した run は通常 COMPLETED で終了します。プロセスが失敗した場合、サンドボックスは FAILED に入ることがあります。
代わりにコマンドをインタラクティブに実行する必要がある場合は、Sandbox.exec() とともにコンテキストマネージャーを使用します:
明示的なライフサイクル制御
Sandbox.wait() や Sandbox.stop() などのメソッドを使用します。
ほとんどの場合、これらのメソッドを直接呼び出す必要はありません。Sandbox.exec()、Sandbox.read_file()、Sandbox.write_file() などの操作では、準備が整うまで自動的に待機します。また、コンテキストマネージャー (with Sandbox.run() as sandbox:) は、ブロックを抜けるとサンドボックスを自動的に停止します。
サンドボックス を停止する
Sandbox.stop() を使用します。