暂停与恢复

更新时间:
复制 MD 格式

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