11 Stimmen

Versuchen Sie endlich das Äquivalent in Matlab

Mögliches Duplikat:
Wie lassen sich Ressourcen in MATLAB ausnahmesicher behandeln (z.B. "try finally")?

Ich verwende die Matlab-Toolbox für paralleles Rechnen auf diese Weise:

matlabpool open 

parfor …

matlabpool close

Wenn ein Fehler auftritt in parfor wird das Programm beendet, und matlabpool wird nicht geschlossen. Wenn ich den Fehler behebe und das Programm erneut ausführe, matlabpool open schlägt fehl, weil sie bereits geöffnet ist. Ich muss sie also manuell schließen, was ich immer vergesse. Der ideale Weg wäre, es zu ändern (Pseudocode):

matlabpool open 
try
  parfor …
finally
  matlabpool close
end

Gibt es hierfür eine bewährte Praxis?

20voto

Andrew Janke Punkte 23072

Utilice onCleanup . Damit können Sie Code einrichten, der ausgeführt wird, wenn Sie den Bereich verlassen, unabhängig davon, ob es sich um einen normalen oder einen Fehlerausgang handelt. Es funktioniert also wie finally, außerdem werden Ausnahmen bei der Bereinigung gelöscht und alle onCleanup s unabhängig sind.

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

Sie müssen die try...finally zu einer Funktion hinzufügen oder in eine solche einfügen, damit dies richtig funktioniert. Der Aufräumcode wird nur ausgeführt, wenn die GC den Inhalt von cleaner Dies geschieht, wenn der Arbeitsbereich beim Verlassen der Funktion (oder beim manuellen Löschen) außer Reichweite gerät. Im Gegensatz zu einigen anderen Sprachen, ist Matlab's try Block ist kein lexikalischer Bereich für Variablen; Variablen, die zum ersten Mal innerhalb eines try bleiben so lange bestehen, bis die sie einschließende Funktion verlassen wird. Das Gleiche gilt für alle anderen Blöcke: Die Funktion ist die einzige Ebene des Scopings für die Lebenszeit lokaler Variablen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X