[PYTHON] Verschiedene Möglichkeiten, Ressourcen mit Umfang zu zerstören

RAII(C++)

Siehe aus Wikipedia. Der Destruktor wird durch Zerstören der automatischen Variablen aufgerufen, und die Ressource wird zu diesem Zeitpunkt geschlossen. Es wird davon ausgegangen, dass die close-API keine Ausnahme auslöst. Wie das Schutzmodul von Perl.

void functionA()
{
    LogFile log("Output log of functionA");
 
    log.write("fun Step succeeded");
 
    // ...Verwenden Sie weiterhin log...
    //Unabhängig davon, ob eine Ausnahme ausgelöst wird oder eine Funktion zurückgegeben wird, ist das Handle der Protokolldatei garantiert geschlossen.
}

mit Klausel (Python)

Es gab es in der Vergangenheit nicht, aber es hat zugenommen.

with open("hello.txt") as f:
    for line in f:
        print line

Erhalte proc (rubin)

Erhält einen Abschluss und weist Ressourcen vor und nach Ausführung der Funktion zu und zerstört sie.

open("foo.csv") {|file|
  while l = file.gets
    lines += 1
    fields += l.split(',').size
  end
}

using-Klausel (C #)

Ich möchte c # mit sehen.

//Wenn Sie die Dispose-Methode implementieren, können Sie sie nach dem Beenden von verwenden

using (StreamWriter writer = 
                new StreamWriter("memo.txt", false, Encoding.UTF8))
{
    writer.Write("Text");
}

scope(D-lang)

Die Funktion nach dem Gültigkeitsbereich wird beim Escape ausgewertet.

void abc()
{
    Mutex m = new Mutex;

    lock(m);	//Mutex sperren
    scope(exit) unlock(m);	//Am Ende des Bereichs entsperren

    foo();	//Mach die Verarbeitung
}

defer(go-lang)

Ähnlich wie Umfang

    f, err := os.Open(filename)
    if err != nil {
        return "", err
    }
    defer f.Close()  // f.Schließen wird nach Abschluss ausgeführt

Try-with-Resources-Syntax (Java)

Es schließt diejenige, die AutoCloseable Interface implementiert. (Danke an tsuyoshi_cho)

    public static void main(String[] args) {
        try (AutoCloseable imp = new AutoCloseableImpl()) { // New!
            System.out.println("hoge");
        } catch(Exception e) {
            System.out.println("catch:" + e);
        } finally {
            System.out.println("finally");
        }
    }

synchronized(Java) Sie können die Erfassung von Sperren für Objekte mit Syntax verwalten.

class MyObject {
  int val;

  MyObject(int val) {
    this.val = val;
  }

  synchronized void setVal(int val) {
    this.val = val;
  }

  synchronized int getVal() {
    return val;
  }
}

Vorerst werde ich es hinzufügen, wenn ich mich an etwas erinnere.

Recommended Posts

Verschiedene Möglichkeiten, Ressourcen mit Umfang zu zerstören
2 Möglichkeiten, mit SessionNotCreatedException umzugehen
Verschiedene Möglichkeiten, ein Wörterbuch zu erstellen (Erinnerungen)
4 Möglichkeiten, mit fehlenden Diktatschlüsseln umzugehen
[Python] Listenverständnis Verschiedene Möglichkeiten zum Erstellen einer Liste
Verschiedene Methoden zum Extrahieren von Spalten des NumPy-Arrays
Versuchen Sie es auf verschiedene Arten zu lösen (SAT, CSP)
Konvertieren Sie 202003 bis 2020-03 mit Pandas
[Python] Verschiedene Möglichkeiten, Daten mit Numpy zu generieren (arange / linspace / logspace / zeros / Einsen / mgrid / ogrid)
Verschiedene Farbleisten mit Matplotlib
Ich habe versucht, mit Python faker verschiedene "Dummy-Daten" zu erstellen
Ich habe verschiedene Methoden ausprobiert, um japanische Post mit Python zu senden
Versuchen Sie, verschiedene Informationen anzuzeigen, die für das Debuggen mit Python nützlich sind