我目前正在编写代码,使用Unix集群上的节点运行一系列耗时的实验。这些实验中的每一个都需要在12核机器上运行3天。每次实验完成后,我都希望将一些数据保存到一个公共文件中。
我有一个小问题,因为我同时将所有实验提交到群集,因此他们也可能同时保存到同一个文件中。
我想知道当多个MATLAB实例同时尝试保存同一个文件时会发生什么(错误/崩溃/无)。无论结果如何,我可以使用try / catch循环解决它:
n_tries = 0;
while n_tries < 10
try
save('common_file',data)
n_tries = 10;
catch
wait_time = 60 * rand;
pause(wait_time);
n_tries = n_tries+1;
end
end
end
答案 0 :(得分:3)
对于如此长时间的模拟运行,除非您拥有可靠的框架,否则不要自动聚合数据。有几个原因:
使用一些独特的模式,例如电脑名称+当前日期/时间
答案 1 :(得分:3)
别。
所有Matlab功能在多线程/处理环境中明确不安全。 如果你从多个matlab会话同时写入一个mat文件,很可能缺少几个变量(因为例如2个matlab附加到文件的相同状态)或整个文件被破坏。
保存单个文件并在后处理步骤中合并它们。
答案 2 :(得分:0)
通过单个记录器任务执行文件输出并将保存信息排入该任务,您将获得最佳服务。
不要忘记,您提供给matlab的输出“文件”只需文件 - 即支持必要的方法。