[Python-de] letzte Rettung

Georg Mischler schorsch at schorsch.com
Thu May 10 09:25:46 EDT 2001


> Persistenter Interpreter? Es ging doch um persistente Datenbank-
> verbindungen. Dass der Interpreter im Apache steckt, steht ausser Frage. ;)

Und was genau ist dein Problem? Wenn der Interpreter persistent
ist, dann koennen grundsaetzlich auch alle anderen Teile einer
darin ausgefuehrten Applikation persistent sein. Das schliesst
ohne weitere Zauberei auch Datenbankverbindungen mit ein.


> > # Handler, wird bei jedem Request (Seitenaufruf) aufgerufen
> > def handler(req):
> >     req.content_type = "text/plain"
> >     req.send_http_header()
> >     req.write("Hello World!")
> >
> >     # Hier evtl. irgendwelches Datenbank-Zeug
> >
> >     return apache.OK
> >
> > # Initialisierungsteil der Anwendung, wird beim Laden des Scripts in den
> > Interpreter *1 Mal* ausgeführt.
>
> Ja schon, aber wie haeufig wird denn das Skript in den Interpreter
> geladen?

Einmal.
Da fehlt dir offenbar das grundlegende Verstaendnis, wie bei
Python Module behandelt werden. Ein Modul kann zwar viele male
"import"iert werden, physisch geladen wird es aber nur beim
ersten mal. Jedes weitere import-Statement liefert einfach das
schon geladene Modul zurueck. Aller eventuell verhandener
Initialisierungcode (z.B. das Oeffnen einer Datenbankverbindung)
wird ausschliesslich beim ersten mal ausgefuehrt.

Das obige Beispiel illustriert genau dieses Prinzip, und
beantwortet deine urspruengliche Frage damit schon vollstaendig
und erschoepfend. Es handelt sich bei diesem Code-Beispiel um den
(unvollstaendig implementierten) Prototypen eines kompletten
Application-Servers. Genau das, was du haben willst! Viel
komplizierter muss es gar nicht mehr werden.


> > > Die Frage war ja nun, ob Python persistente Verbindungen kennt.
> > > IMHO muessten jene durch mod_python/mod_snake erreicht werden
> > > koennen, denn bei puren Python-CGI-Skripts (in Verwendung mit
> > > dem Apache) duerften sie kaum moeglich sein.
> >
> > Genau :-)
>
> Ist richtig, sie waeren theoretisch moeglich. Aber werden sie
> von mod_python auch geboten?

Das ist nicht die Aufgabe von mod_python. Mod_python stellt
sicher, dass der Python-Interpreter geladen wird und bleibt,
und dass die richtigen Handler aufgerufen werden. Die konkrete
Datenbankverbindung wird ein paar Ebenen weiter hinten von einem
reinen Python-Modul aufgebaut und unterhalten.


> Keine Persistenz (ausser bei Datenbankverbindungen, ist somit eine
> Spezialitaet von mod_php), kein Connection Pooling, keine
> Hintergrundprozesse...

Und was hat das alles miteinander zu tun?
Falls PHP auf der Sprachebene keine persistenten Module (und damit
Modulattribute wie Datenbankverbindungen) zulassen sollte, dann
ist das eben nicht das gleiche. Da dies bei Python der Fall ist,
muss nicht das Apache-Modul fuer andere Zwecke als die Koppelung
zum Web-Server "missbraucht" werden.

Das Connection-Pooling hat mit dem Applikations-Server meines
Erachtens ueberhaupt nichts zu tun (das passiert einige Ebenen
weiter vorne), und Hintergrundprozesse brauchst du nur dann, wenn
dein Applikationsserver nicht in der Lage ist, die ganze
Applikation selber abzuwickeln. Ein Spezialfall eines solchen
Hintergrundprozesses ist natuerlich die Datenbank selber, die
*muss* aber auch nicht seperat sein (siehe z.B. Zope)!


Viel Spass!

-schorsch

-- 
Georg Mischler  --  simulations developer  --  schorsch at schorsch.com
+schorsch.com+  --  lighting design tools  --  http://www.schorsch.com/




More information about the Python-de mailing list