用途:为 MATLAB 并行池(parallel pool)的工作进程准备工作环境与每工作进程状态。默认情况下,进程工作进程只继承控制客户端的 MATLAB 路径状态,不继承已加载库、已打开连接或昂贵的预计算对象,此类代码需要显式设置。适用于:工作进程需要不可序列化资源(数据库连接、COM 对象、动态库、文件句柄);需要每工作进程一次性的昂贵初始化;需要设置路径或环境变量;需要把用 spmd 做前置副作用的旧代码现代化;遇到对象无法序列化传入 parfor 的报错。不适用:客户端内存中已有数据且仅用于单个 parfor(MATLAB 会自动广播)。 主要能力与用法:不可序列化且需清理的资源用 parallel.pool.Constant(@buildFcn, @cleanupFcn),构建函数在工作进程上惰性执行,清理随对象离开作用域自动完成;基于文件的数据用 parallel.pool.Constant(@() load(file).var),避免客户端持有数据集,注意不要在客户端先 load 再包装;仅需一次性副作用且无需返回值时用 parfevalOnAll(pool, @fcn, 0) 并用 fetchOutputs 抛出错误;路径可在 parpool(..., AdditionalPaths=paths) 设置,池已在别处打开时用 parfevalOnAll(pool, @addpath, 0, p),不要删除重建池;环境变量用 parpool(..., EnvironmentVariables=vars),或在现有池上用 parfevalOnAll(pool, @setenv, 0, k, v);数据库连接推荐 Database Toolbox 的 createConnectionForPool,返回的仍是标准 parallel.pool.Constant,连接在离开作用域或池关闭时释放。线程池同样支持 Constant 与 parfevalOnAll,但线程共享客户端进程,路径与环境变量改动自动可见,AdditionalPaths 与 EnvironmentVariables 不适用。 限制与注意:spmd 做设置属反模式——无清理保证、任一工作进程断连会导致整池被销毁、Composite 变量无法在 parfor 内直接使用,应改用 Constant(需清理时)或 parfevalOnAll(无需清理时)。构建函数所用辅助函数需在工作进程路径上,同文件局部函数可被句柄捕获。务必在 parfor 体内引用 c.Value 以触发惰性初始化。本文档未提供收费、价格或性能数据。
matlab-set-up-worker-state
数据与分析
更新于 10-16 06:45