[Python-de] letzte Rettung

Ralf Geschke ralf at kuerbis.org
Thu May 10 13:45:44 EDT 2001


(Och noe, wenn ich 'ne Liste lese, brauche ich keine private
Antwort, die dann _auch_ noch an die Liste geht. Bitte dies in 
Zukunft beachten.

Hier also meine Antwort, die ich Gerhard auf seine bzw. diese Mail
geschrieben habe:

...)

Hallo !
 
> Persistent.

Naja, da bleibt mir wohl nix anderes uebrig, als Dir zu glauben. 
Quellen wuerden mich allerdings mehr ueberzeugen. ;-)
Oder anders: Ich hab' jetzt mal das mod_python-Manual quergelesen, 
da wird ueber die Persistenz von Datenbank-Verbindungen bzw. 
Variablen kein Wort verloren. Vielleicht hast Du mich auch
ein wenig falsch verstanden siehe unten. 

> > Der Laufzeitzyklus bei Web-Anwendungen sieht doch wie folgt aus:
> > -> User ruft Seite auf (HTTP-Request)
> > -> Apache bemerkt, dass es sich um ein Python-Skript handelt,
> >    reicht Anfrage an Python-Interpreter weiter (der sagen wir
> >    mal mit mod_snake / mod_python ein Modul des Apache ist)
> > -> Python verarbeitet Anfrage, oeffnet eine Datenbank,
> >    sucht die notwendigen Daten zusammen, baut HTML-Seite auf,
> >    reicht Ergebnisse an Apache weiter
> > -> Apache fuehrt die Ergebnisse, somit die HTML-Seite dem Browser
> >    und damit dem User zu.
> > -> und das ganze von vorne beim naechsten Seitenaufruf...
> 
> Nein. Das wäre typisch für CGI.

Naja, ich sehe jetzt nicht den Unterschied zwischen diesem Zyklus
und dem von Dir beschriebenen. 
Ich habe ja nicht gesagt, dass der Python-Interpreter jedesmal
neu gestartet wird! Natuerlich ist dieser im Apache als Modul
enthalten, und muss daher nicht neu gestartet werden. 
Es ging ja vielmehr um das Python-Skript. Dieses wird meines 
Erachtens immer neu gestartet bzw. dem im Apache laufenden
Python-Interpreter uebergeben. 
Wodurch das nun geschieht, ob sich mod_python darum kuemmert, 
oder ob es via CGI aufgerufen wird, ist im Grunde genommen egal. 

mod_python bietet nun eben den Vorteil, dass der Python-Interpreter
nicht jedesmal neu aufgerufen werden muss, sowie dass persistente
Datenbank-Verbindungen theoretisch moeglich waeren. 
Bei persistenten Variablen wird es bereits schwieriger, bei
PHP ist Derartiges z.B. nicht moeglich, ich wage momentan
noch zu bezweifeln, dass es bei Python anders ist. 

> Ein wenig vereinfacht: Beim Starten von Apache wird ein Python-Interpreter
> geladen, der lebt solange bis Apache heruntergefahren wird (man kann mehrere
> Python-Interpreter laden lassen, für Bereiche einer Website o. ä.). Beim ersten

Das ist klar. Das gilt genauso fuer mod_php - eben als PHP-Interpreter. 

> Aufruf einer Seite wird das mod_python-Anwendung gestartet und *nicht* beendet.
> Es handelt sich hier um einen persistenten Interpreter. Üblicherweise öffnet man

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

> # 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? 

> Der Laufzeitzyklus bei mod_python sieht dann wie folgt aus:
> -> User ruft Seite auf (HTTP-Request)
> -> Apache bemerkt, dass es sich um einen Request handelt, den
>    ein mod_python-Handler verarbeiten soll
> -> mod_python-Handler verarbeitet Anfrage, sucht die 
>    notwendigen Daten zusammen, baut HTML-Seite auf,
>    reicht Ergebnisse an Apache weiter
> -> Apache fuehrt die Ergebnisse, somit die HTML-Seite dem Browser
>    und damit dem User zu.
> -> und das ganze von vorne beim naechsten Seitenaufruf...

Das ist genau dasselbe wie von mir beschrieben. Ok, ohne dass
ich das Wort "Handler" benutzt habe. ;-) 

Aber wenn ich das Manual richtig deute, werden diese Handler bei jedem
Request aufgerufen:
http://www.modpython.org/live/mod_python-2.7.2/doc-html/pyapi-handler.html

> Der Python-Interpreter wird nicht jedesmal neu geladen, sondern lediglich die
> handler-Funktion wird neu aufgerufen.

Klar. Und damit das Skript. 

> > 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? 

> Genau. mod_python + Apache ist auch ein "Application Server". Nur muss man sich
> halt die gesamte Application selber bauen.

Nein, genauso wenig wie PHP als mod_php ein Application Server ist. 
Keine Persistenz (ausser bei Datenbankverbindungen, ist somit eine
Spezialitaet von mod_php), kein Connection Pooling, keine 
Hintergrundprozesse...

Bitte nicht falsch verstehen: Ich will mod_python gar nicht angreifen
oder schlechter machen als es ist, aber bislang fehlt mir wirklich 
der Beweis, dass die Vorgaenge bei mod_python _so_ dermassen
anders ablaufen sollen als bei mod_php oder mod_perl. 

Beste Gruesse,
   Ralf 



More information about the Python-de mailing list