[Python-de] letzte Rettung

Martin v. Loewis martin at loewis.home.cs.tu-berlin.de
Thu May 10 09:57:10 EDT 2001


> Die erste Frage ist, ob persistente DB-Verbindungen in Python
> möglich sind.  Bei Perl ist dies der Fall, wenn es als Modul im
> Webserver integriert ist. Beim Apache ist es z.B. das Modul
> mod_perl, wie mod_python bei Python. In Perl bindet man einfach
> Apache::DBI als Beispiel ein, und man kann normal mit DBI
> programmieren und hat persistente Verbindungen. Ist dies bei Python
> auch so? Wenn ja wie? (Beispielcode vielleicht dazu)

Ich weiss nicht genau, was eine persistente DB-Verbindung ist.

Vielleicht eine, die über längere Zeit (mehrere HTTP-Requests?)
erhalten bleibt?

Es ist sicher möglich, in Python eine DB-Verbindung tagelang aufrecht
zuerhalten, solange das Python nicht beendet wird. Dazu nimmt man
einfach ein DB-API-Modul, öffnet die Verbindung, und macht sie nicht
wieder zu.

Die Frage, die sich daraus ergibt, ist dann: Ist es möglich,
Python-Objekte (DB-Verbindungen oder sonstige) über mehrere
HTTP-Requests aufrechtzuerhalten.

Das hängt natürlich vom Webserver ab, und es gibt bestimmt ein Dutzend
Alternativen. Wenn man den in Python implementierten HTTP-Server
benutzt (Modul HTTPServer), und sich einfach globale Variablen merkt,
ist dies problemlos möglich. Hier der gewünschte Beispielcode:

import BaseHTTPServer
import mySQLdb

persistente_verbindung = mySQLdb.connect(...)

class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler):
  def do_GET(self):
    # analysiere self.path
    # benutze persistente_verbindung
    self.send_response(200)
    self.end_headers()
    ...

server = BaseHTTPServer.HTTPServer(('',80), MyHandler)
server.serve_forever()

Natürlich würde man normalerweise einen "richtigen" Webserver
benutzen; dieses Beispiel soll nur demonstrieren, dass die Antwort auf
Deine Frage stark vom Rest der verwendeten Technologien abhängt.

Genauso gut ist es möglich, einen Python-Prozess zu starten, der immer
läuft, und in einem CGI-Skript mit diesem Prozess zu
kommunizieren. Zum Kommunizieren kann man alles Mögliche verwenden:
HTTP, SOAP, CORBA, ...

Vermutlich ist es auch möglich, bei manchen Webservern ein
In-Prozess-Python-Modul zu installieren, dass auch am Ende eines
Requests nicht gelöscht wird und selber auch keine Python-Objekte
freigibt. Das hängt natürlich vom Web-Server ab.

Ciao,
Martin



More information about the Python-de mailing list