Server Resource
Server Resource 用于保存跨 Job 复用的对象,例如 AI 模型、ONNX Session、媒体解码器、数据库连接或内存缓存。它们随 Server 创建,并在 Server 关闭时释放。
注册延迟 Resource
使用 @server.resource() 注册工厂:
@server.resource("model_manager")
def create_model_manager(job_server):
return ModelManager(job_server.storage_root / "models")
工厂在 Runtime 绑定 Storage Root 后执行,因此可以安全地从 job_server.storage_root 创建项目目录。
在 Handler 中使用
@server.job("run-inference")
def run_inference(context, parameters):
manager = context.resource("model_manager")
model = manager.get(parameters["model"])
return model.predict(parameters["input"])
Resource 实例在同一 Server 的多个 Job 之间复用。对大型模型而言,这可以保留已加载权重或 Session,减少重复初始化。
向 Blender 暴露状态
实现 snapshot(),为 Runtime 提供可序列化状态:
class ModelManager:
def snapshot(self):
return {
"downloaded": sorted(self.downloaded_models()),
"loaded": sorted(self.loaded_models),
}
Blender 侧同步查询:
这个模式适合在 Panel 中显示模型是否已下载、当前加载的模型或缓存大小。
清理内存状态
Resource 实现 clear() 后,可以在 Server 空闲时从 Blender 调用:
class ModelManager:
def clear(self):
self.loaded_models.clear()
runtime.clear_resource("model_manager")
clear() 通常释放内存或显存,同时保留磁盘模型。Server 会协调清理与 Job 提交,使 Resource 在空闲状态完成清理。
关闭 Resource
Resource 可以实现 close():
Server 关闭时等待活动 Handler 收尾,然后按注册的逆序调用 Resource 的 close()。适合关闭线程池、文件句柄或原生 Runtime Session。
直接添加实例
普通 Python 测试或已绑定 Storage Root 的 Server 也可以添加现有实例:
Extension 项目通常优先使用延迟工厂,让目录配置和 Resource 创建保持在同一个 Server 生命周期中。