暂停用于在保留 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()释放资源。