打开
打开加密容器或明文模型建会话。本绑定公开 Session.open / open_plain / open_ex 三个入口;没有 open_plain_ex。
打开时按 PayloadKind × 硬件 × prefer_provider 选 Provider;对应包未装则内部调一次 runtime.ensure(无进度回调,可能阻塞下载)。指名但不可用 = fail-closed,绝不静默降级。
Windows 收到 rknn 载荷抛 UnsupportedPayloadError。Windows 上指名 edge-rknn 抛 UnsupportedPlatformError。
Paddle 是运行时载荷:open_plain 可接 .pdmodel(同目录须有 .pdiparams)或含二者的目录。
打开
Session.open()
@classmethod
def open(
cls,
container_path: str,
*,
key_path: str | None = None,
password: str | None = None,
prefer_provider: str | None = None,
) -> Session
打开已签发容器(.darmodel,DARM1)建会话。
参数:
container_path(str) — 容器路径,不能为空key_path(str | None) — 授权文件.darmkey,默认Nonepassword(str | None) — 永久密码通道,默认Noneprefer_provider(str | None) — 指名 Provider;None= 按载荷 × 硬件 × 已装包自动选
返回值:
Session— 已打开的会话
key_path 与 password 至少给一个;都给则 key 文件优先验票。指名但不可用 = fail-closed,绝不静默降级。container_path 为空抛 InternalError(码 18)。
典型异常:IoNotFoundError / IoDeniedError / BadContainerError / BadLicenseError / PasswordRequiredError / PasswordWrongError / MachineMismatchError / TrialExhaustedError / UnsupportedPayloadError(如 Windows 上 rknn 载荷)/ ProviderMissingError / ProviderAbiMismatchError / HardwareMissingError / DriverTooOldError / NetworkFailedError / ChecksumMismatchError / CancelledError(后三码来自内部 ensure)。
示例:
from darra_ai import Session
with Session.open("model.darmodel", key_path="model.darmkey") as s:
print(s.provider_id, s.task)
Session.open_plain()
@classmethod
def open_plain(
cls,
onnx_path: str,
*,
prefer_provider: str | None = None,
) -> Session
打开明文模型建会话。与 open 同一推理路径,只跳过容器解码与验票。
参数:
onnx_path(str) — 明文模型路径(历史参数名)。不能为空prefer_provider(str | None) — 指名 Provider;None= 自动选
返回值:
Session— 已打开的会话
onnx_path 可以是:
.onnx文件.pdmodel文件(同目录须有对应.pdiparams)- 含
*.pdmodel+*.pdiparams的目录
Paddle 是运行时载荷(payload_kind=paddle)。.pt / .pth 仍拒 → UnsupportedPayloadError(先转 ONNX)。路径为空抛 InternalError。目录存在但缺 pdmodel / pdiparams,或 .pdmodel 缺伴生 .pdiparams → UnsupportedPayloadError。
其余(含内部 ensure、fail-closed、Windows 无 RKNN)同 open。本绑定没有 open_plain_ex。
示例:
with Session.open_plain("model.onnx") as s:
print(s.encrypted) # False
with Session.open_plain("model.pdmodel") as s:
print(s.payload_kind) # paddle
Session.open_ex()
@classmethod
def open_ex(
cls,
container_path: str,
options: SessionOptions | None = None,
) -> Session
打开加密容器建会话(可扩展入口)。
参数:
container_path(str) — 容器路径options(SessionOptions | None) — 可选通道。None= 全部为空
返回值:
Session— 已打开的会话
当前翻译到 Session.open(把 options 的 key_path / password / prefer_provider 展开)。Core 落地 darra_session_open_ex 后只换调用点,公开签名不变。构造 SessionOptions 不加载 native。本绑定的 SessionOptions 不含头文件的 intra_op_threads / inter_op_threads / cpu_affinity_mask。
示例:
from darra_ai import Session, SessionOptions
opt = SessionOptions(key_path="model.darmkey", prefer_provider="onnx-cpu")
with Session.open_ex("model.darmodel", opt) as s:
print(s.meta())
生命周期
close()
def close(self) -> None
关闭会话并释放全部资源。重复 close / 未打开均为 no-op。
示例:
s = Session.open("model.darmodel", key_path="model.darmkey")
try:
print(s.meta())
finally:
s.close()
close 后句柄失效,再调 meta / infer_image 抛 InternalError(「会话已关闭或尚未打开」)。禁止与任何在飞调用并发。 __del__ 是兜底,不要当主路径。
__enter__ / __exit__
def __enter__(self) -> Session
def __exit__(self, *exc: object) -> None
上下文管理器。退出 with 块时自动 close()。
示例:
from darra_ai import Session
with Session.open("model.darmodel", key_path="model.darmkey") as s:
print(s.task, s.labels)