暫停用於在保留 Sandbox 狀態的同時降低運行佔用,後續串連同一個 Sandbox 即可恢複使用。
使用限制
白名單:暫停與恢複功能當前僅對已開通白名單的帳號可用。請先完成白名單開通,再調用 sandbox.pause() 或串連已暫停 Sandbox。Sandbox 暫停後進入深休眠狀態,深休眠狀態有最大保留時間長度,需在保留時間長度內串連恢複,超過保留時間長度後無法保證仍可恢複。
暫停期間不收取 vCPU 和記憶體費用,但仍按深休眠佔用的儲存量收取磁碟費用,計費規則請參見隨用隨付。需要長期保留的資料,應寫入 OSS、NAS 等外部儲存。
配置自動暫停與自動回復
建立 Sandbox 時,可以通過 lifecycle 配置逾時後的處理方式,以及已暫停 Sandbox 是否在收到請求時自動回復。
on_timeout(Python)/onTimeout(TypeScript):預設值為kill,Sandbox 逾時後會被終止。設定為pause後,Sandbox 逾時時會自動暫停並保留目前狀態。auto_resume(Python)/autoResume(TypeScript):預設值為False/false。設定為True/true後,對已暫停 Sandbox 的 SDK 操作或進入 Sandbox 內服務的 HTTP 要求會觸發自動回復,無需先調用Sandbox.connect()。該選項需要與on_timeout="pause"/onTimeout: "pause"配合使用。
當前暫不支援通過keep_memory(Python)/keepMemory(TypeScript)配置僅保留檔案系統的暫停方式。
建立 Sandbox 時開啟自動暫停與自動回復:
from e2b_code_interpreter import Sandbox
sandbox = Sandbox.create(
timeout=10 * 60,
lifecycle={
"on_timeout": "pause",
"auto_resume": True,
},
)const sandbox = await Sandbox.create({
timeoutMs: 10 * 60 * 1000,
lifecycle: {
onTimeout: "pause",
autoResume: true,
},
});lifecycle 配置在 Sandbox 恢複後仍然生效。Sandbox 再次逾時時會繼續自動暫停;後續活動到達時,會再次自動回復。如果未開啟自動回復,仍可以通過 Sandbox.connect() 手動恢複已暫停 Sandbox。
樣本中的逾時時間通過建立時的 timeout(Python)/timeoutMs(TypeScript)設定,建立後可調用 set_timeout(Python)/setTimeout(TypeScript)調整。具體配置,請參見逾時。
暫停 Sandbox
暫停當前 Sandbox:
sandbox.pause()await sandbox.pause();暫停後,Sandbox 不再處於活躍運行狀態。後續可以通過串連已有 Sandbox 的方式恢複使用。
串連時自動回復
Sandbox.connect(sandboxId) 支援串連已有 Sandbox。如果 Sandbox 已暫停,串連時會自動回復。
import os
from e2b_code_interpreter import Sandbox
sandbox = Sandbox.connect(
sandbox_id,
api_key=os.environ["E2B_API_KEY"],
api_url=os.environ["E2B_API_URL"],
domain=os.environ["E2B_DOMAIN"],
)const sandbox = await Sandbox.connect(sandboxId, {
apiKey: process.env.E2B_API_KEY,
apiUrl: process.env.E2B_API_URL,
domain: process.env.E2B_DOMAIN,
});使用建議
對需要短期保留內容相關的任務,可以在任務間隔期間暫停 Sandbox。
恢複後需要重新確認長串連、進程狀態和業務層狀態是否符合預期。
暫停不等於終止。任務完成後,應調用
sandbox.kill()釋放資源。