matlab - 试试……终于等同于 Matlab

标签 matlab error-handling

<分区>

Possible Duplicate:
How do you handle resources in MATLAB in an exception safe manner? (like “try … finally”)

我是这样使用Matlab并行计算工具箱的:

matlabpool open 

parfor …

matlabpool close

如果parfor发生错误,程序终止,matlabpool不关闭。当我修复错误并再次运行时,matlabpool open 失败,因为它已经打开。所以我需要手动关闭它,我总是忘记这一点。理想的方法是将其更改为(伪代码):

matlabpool open 
try
  parfor …
finally
  matlabpool close
end

对此有什么最佳实践吗?

最佳答案

使用onCleanup。它会让您设置在您退出作用域时执行的代码,无论是正常退出还是错误退出。所以它的工作方式与 finally 类似,而且它消除了清理中的异常,并且所有 onCleanup 都是独立的。

function doSomething
matlabpool open
cleaner = onCleanup(@() matlabpool('close'));
parfor ...
%// and then no need to call close here

您需要将 try...finally 更改为一个函数,或者将其粘贴在一个函数中,这样才能正常工作。清除代码仅在 GC 清除 cleaner 的内容时执行,当您离开该函数(或您手动清除它)时它的工作区超出范围时会发生这种情况。与其他一些语言不同,Matlab 的 try block 不是变量的词法作用域;在 try 中首次赋值的变量将一直存在,直到它们的封闭函数被保留。所有其他 block 都相同:函数是局部变量生命周期范围的唯一级别。

关于matlab - 试试……终于等同于 Matlab,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9021104/

相关文章:

python-3.x - For循环/错误: object of type 'NoneType' has no len()

MATLAB 在图形上添加 slider

matlab - 计算效率 : sparse vs. 满

matlab - 时区应该如何格式化在Matlab中,当将字符串插入带有时区的postgresql字段时间戳时?

c++ - 用于将字符串放入整数的 cin 失败标志

php - 如何在 PHP 中获取有用的错误消息?

oop - 验证类数据

python - 列出 Python 类中已实现的方法

matlab - 如何在 Matlab 中编辑 "mexopt.bat"文件?

matlab - 矩阵的幂