PENDING 状態で開始され、コンテナーのプロビジョニング中に CREATING に移行し、使用可能になると RUNNING に入ります。
サンドボックスを メインコマンド とともに開始すると、そのコマンドがサンドボックスのメインプロセスになります。メインプロセスが終了すると、サンドボックスは COMPLETED (終了コード 0) や FAILED (起動時または実行中のエラー) などの終端状態に入ります。サンドボックスは、外部から停止された場合や最大ライフタイムを超えた場合にも TERMINATED に入ることがあります。
サンドボックスの状態
ほとんどの操作では、サンドボックスが
RUNNING 状態である必要があります。ただし、多くの操作では、サンドボックスの準備が完了するまで待機してから処理が続行されます。
サンドボックスが終端状態に入ると、追加の作業には使用できなくなります。
準備完了または完了まで待機する
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() を使用します。