[Python-de] letzte Rettung

Dirk Detering ddet at gmx.de
Thu May 10 17:36:44 EDT 2001


> Das heisst: Beim ersten Aufruf einer
> stand-alone-kommandozeilen-Applikation
> werden _einmal_ die Module geladen (importiert). Wenn das Programm
> danach beendet und neu gestartet wird, werden die Module
> _nicht_ wieder neu geladen? Sie bleiben (irgendwo) im Interpreter
> stecken?
> Meinst Du das im Ernst?

Du solltest mal differenzieren, was denn "das Programm" bei 
Dir ist.  Dein Script oder der Interpreter.

Die Laufzeit des Pythoninterpreters ist naemlich nicht mit
der des Scripts identisch. 

Ganz einfaches Beispiel:

--Datei eintest.py :
import os, sys

print "hallo, dies ist ein test"

def testfunc():
    print "hallo noch ein test"
-- Ende Datei eintest.py


Jetzt gehst Du auf die Kommandozeile und gibst ein:

python

Siehe da, es erscheint der Pythoninterpreter mit seinem Prompt
>>>
Dann rufst Du darin auf:
>>>> import eintest

Und siehe da, der erste Printbefehl laeuft ab (!)

Dann gibst Du ein:
>>>  eintest.testfunc()

Und siehe da, der zweite Printbefehl (in der Funktion) laeuft ab.
Und immer wieder erscheint der Prompt.

Wann ist nun "das Programm"  beendet ?   
Erst, wenn auch der Interpreter gestoppt wird ?
Oder schon, wenn die Befehle abgelaufen sind ?

> 
> Etwas anderes ist doch eine Web-Applikation nun wirklich nicht: 
> User sendet Request, Request wird von Python abgearbeitet,
> Skript beendet sich, User sieht HTML im Brauser. 

Aha !  Du sagst, Script beendet sich.  Das ist eben nicht
identisch mit  Interpreter beendet sich.
Der Global-Scope bleibt naemlich erhalten.

> Oder bei CGI-Skripten, die in Python geschrieben werden? 
> Ist hier das Verhalten genauso wie von Dir beschrieben?
> Die Skripte sind doch irgendwann einmal abgelaufen und 
> werden beendet (noch ist HTTP ein statusloses Protokoll, auch
> Python kann daran nichts aendern...). 

Das hat mit HTTP noch mal ueberhauptnichst zu tun
*stirnrunzel*
Und wieder verwechselst Du die Scripte mit dem Interpreter.

> Was also ist bei mod_python anders als bei Python-CGI-Skripten,
> ausser dass der Python-Interpreter direkt im Apache steckt?

Warum steckt der Interpreter im Apache ?
Damit er mit dem Apache-Server am Leben bleibt !  
So als wenn Du den Prompt
>>>
nie verlaesst !! 
Und solange bleiben auch die Module geladen.


> Das ist kein Application Server. Wirklich nicht...

... Deine Definition !

> Aha. Nun widersprichst Du Dir selbst ein wenig. Also Aufgabe vom
> Python-Datenbank-Modul. Gut. Und das kennt persistente Verbindungen?

???  Was soll das jetzt ???

> Selbstverstaendlich bleiben die Verbindungen offen bei einer
> _laufenden_ Anwendung. Aber wenn diese beendet worden ist, 
> duerften sie geschlossen werden, oder? 

Was ist denn "die Anwendung"   ?  
Eine Funktion die ihr letztes Statement erreicht, ist beendet.
Der Interpreter aber noch nicht.
Also gibt es noch den Global-Scope ...   und ?

Nochmal:   Die Anwendung und ihre Laufzeit ist nicht identisch 
               mit dem Interpreter.

> auch PHP-Skripten: Auf dem Server geschieht nur bei einem
> Request etwas (etwa Datenbank-Abfrage). Genaugenommen ist
> dies sprachenunabhaengig, und ich behaupte, dass auch mod_python
> nichts anderes macht, weshalb es auch keinen Application Server
> darstellt. 

Wieder:  Genau differenzieren.  Niemand hat behauptet, dass
mod_python ein Application Server ist.
Aber ein geladenes Modul in Apache/mod_python, welches
requests behandelt, kann als ein solcher betrachtet werden.

> Ob man eine Datenbank als Application Server bezeichnen moechte,
> nunja, darueber kann man sicherlich streiten, ich wuerde 
> sie nicht so nennen. 

*grmpf*

> Jegliche Beweise der Persistenz innerhalb mod_python-Anwendungen
> nehme ich nach wie vor gerne entgegen. 

schon dagewesen.

Auch beste Gruesse

Dirk

-- 
GMX - Die Kommunikationsplattform im Internet.
http://www.gmx.net




More information about the Python-de mailing list