2015-07-06 6 views
7

Was sind die Konsequenzen, wenn eine psycopg2 Verbindung am Ende eines Python-Skripts nicht geschlossen wird? Betrachten wir zum Beispiel den folgenden Ausschnitt:Muss eine Psycopg2-Verbindung am Ende eines Skripts geschlossen werden?

import psycopg2 
psycopg2.connect("dbname=test") 

Das Skript öffnet eine Verbindung, sie aber nicht am Ende schließen. Ist die Verbindung am Ende der Ausführung noch offen? Wenn ja, gibt es ein Problem, die Verbindung nicht zu schließen?

Antwort

4

Normalerweise werden alle Sockets geschlossen, wenn Ihr Python-Programm beendet wird, und offene Transaktionen werden abgebrochen. Aber es ist eine gute Übung, die Verbindung ganz am Ende zu schließen.

Wenn Sie eine Verbindung schließen, sobald Sie sie nicht mehr benötigen, werden Systemressourcen freigegeben. Was immer gut ist.

Beachten Sie, dass, wenn Sie Ihre Verbindung schließen, zuerst Ihre Änderungen festschreiben. Wie Sie in der psycopg2-API nachlesen können:

Schließen Sie die Verbindung jetzt (statt wann immer del ausgeführt wird). Die Verbindung wird von diesem Zeitpunkt an unbrauchbar sein; Ein InterfaceError wird ausgelöst, wenn eine Operation mit der Verbindung versucht wird. Dasselbe gilt für alle Cursorobjekte, die versuchen, die Verbindung zu verwenden. Beachten Sie, dass eine Verbindung zu schließen , ohne die Änderungen zu begehen ersten jede ausstehende Änderung verworfen werden, verursachen, als ob ein ROLLBACK

+1

Nicht Schließen von Verbindungen durchgeführt wurde, auch lästige Fehler in PostgreSQL Protokollen produzieren. –