[Python-de] letzte Rettung

Gerhard Häring haering_python at gmx.de
Thu May 10 11:46:28 EDT 2001


Ralf Geschke wrote:
> 
> >
> > Fazit: Da man mit den persistenten Python-Interpretern wie z. B. mod_python sie
> > bereitstellt, Web-*Anwendungen* schreibt, handelt es sich auch um ganz normale
> > Python-Anwendungen, Unterschiede zu einer nicht-Web-Anwendung gibt es nicht.
> 
> Verstehe ich nicht. Sind die Verbindungen denn nun persistent oder
> nicht?

Persistent.

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

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
Aufruf einer Seite wird das mod_python-Anwendung gestartet und *nicht* beendet.
Es handelt sich hier um einen persistenten Interpreter. Üblicherweise öffnet man
im Initialisierungsteil der Anwendung die Datenbankconnections usw.:

from mod_python import apache
import pgdb

# 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.
# Hier Initialisierungen, Datenbanken öffnen usw.
con = pgdb.connect( ... )


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

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

[schnipp]

> 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 :-)

> Wie erwaehnt, Application Server sind eine andere Geschichte,
> in diese Richtung ging ja auch die Antwort von Martin, dabei
> hat man sich ja quasi selbst einen Web-Server gebastelt,
> der nun noch eine Menge mehr kann.

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

Gerhard
--
mail:   gerhard <at> bigfoot <dot> de       registered Linux user #64239
web:    http://highqualdev.com              public key at homepage
public key fingerprint: DEC1 1D02 5743 1159 CD20  A4B6 7B22 6575 86AB 43C0
reduce(lambda x,y:x+y,map(lambda x:chr(ord(x)^42),tuple('zS^BED\nX_FOY\x0b')))



More information about the Python-de mailing list