You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matlab删除parpool临时存储文件夹失败,求原因及解决方法

问题描述

通过以下代码创建并行池对象:

c = parcluster(); 
c.JobStorageLocation = storage_folder;
p = gcp('nocreate'); % 若无池,则暂不创建新池。
if isempty(p)
    parpool(c, num_cores); % 创建并行池
elseif p.NumWorkers ~= num_cores
    delete(p); % 删除现有池
    parpool(c, num_cores); % 创建并行池
end

在脚本末尾执行以下代码删除存储文件夹时:

rmdir(storage_folder, 's');

出现如下错误:

Warning: Error occurred while executing the listener callback for event
ObjectBeingDestroyed defined for class parallel.settings.Profile:
Invalid or deleted object.

Error in parallel.Cluster/handleProfileDeleted (line 439)
            obj.ProfileObject = parallel.settings.Profile.empty();

Error in parallel.Cluster>@(~,~)obj.handleProfileDeleted() (line 434)
                    @(~, ~) obj.handleProfileDeleted() ); 
错误原因分析
  1. 对象引用未释放:创建的Cluster对象c仍持有对storage_folder的关联引用,删除文件夹时,MATLAB并行模块的配置监听回调(handleProfileDeleted)尝试访问已被删除的存储位置对应的配置对象,触发"无效或已删除对象"的错误。
  2. 资源占用未清理:即使删除了并行池,MATLAB后台可能仍未完全释放对storage_folder的文件锁,同时Cluster对象的回调逻辑触发时无法找到依赖的配置文件,导致报错。
解决建议
  • 彻底清理并行池与Cluster对象:在删除文件夹前,先销毁并行池并清除Cluster对象,解除对存储文件夹的引用:
    % 销毁现有并行池
    p = gcp('nocreate');
    if ~isempty(p)
        delete(p);
    end
    % 清除Cluster对象,释放关联引用
    clear c;
    % 等待后台完成资源清理(可选,根据实际情况调整等待时长)
    pause(2);
    % 执行文件夹删除
    rmdir(storage_folder, 's');
    
  • 避免自定义存储位置的即时删除:若非必要场景,优先使用MATLAB默认的临时存储目录,减少手动管理存储文件夹带来的资源冲突问题。
  • 确保回调逻辑完成:若必须使用自定义存储,可在删除文件夹前通过parallel.settings.clear()重置并行配置(谨慎使用,会清除自定义配置),确保所有关联的配置监听回调完成执行。

内容的提问来源于stack exchange,提问作者Imahn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 07:23:21