Rom*_*lov 11 error-handling matlab
我用这种方式使用Matlab并行计算工具箱:
matlabpool open
parfor …
matlabpool close
Run Code Online (Sandbox Code Playgroud)
如果发生错误parfor,则程序终止,并且matlabpool未关闭.当我修复错误并再次运行它时,matlabpool open失败,因为它已经打开.所以我需要手动关闭它,这是我永远忘记的.理想的方法是将其更改为(伪代码):
matlabpool open
try
parfor …
finally
matlabpool close
end
Run Code Online (Sandbox Code Playgroud)
这有什么最好的做法吗?
And*_*nke 20
使用onCleanup.它允许您设置在退出作用域时将执行的代码,无论正常还是错误退出.所以它最终起作用,加上它在清理中取消异常,并且所有onCleanups都是独立的.
function doSomething
matlabpool open
cleaner = onCleanup(@() matlabpool('close'));
parfor ...
%// and then no need to call close here
Run Code Online (Sandbox Code Playgroud)
您需要将其更改try...finally为一个函数,或将其粘贴到一个函数中,以使其正常工作.清理代码仅在GC清除内容时执行,cleaner当您离开函数时(或手动清除它)时,它的工作区超出范围.与其他一些语言不同,Matlab的try块不是变量的词法范围; 第一次在一个内部分配的变量try会一直存在,直到剩下它们的封闭功能.对于所有其他块也是如此:该函数是局部变量生命周期的唯一范围.
| 归档时间: |
|
| 查看次数: |
4897 次 |
| 最近记录: |