2 Stimmen

Wirklich seltsames (mod)_python Problem

Das ist schwer zu erklären!

Ich schreibe eine Python-Anwendung, die über mod_python ausgeführt werden soll. Bei jeder Anfrage unterscheidet sich die zurückgegebene Ausgabe, obwohl die Logik "fest" ist.

Ich habe zwei Klassen, classA y classB . So dass:

class ClassA:
    def page(self, req):
        req.write("In classA page")
        objB = ClassB()
        objB.methodB(req)
        req.write("End of page")

class ClassB:
    def methodB(self, req):
        req.write("In methodB")
        return None

Das ist ein schwer eine gekürzte Version von dem, was ich habe. Aber das, was ich herausgeschnitten habe, ändert den Kontrollfluss nicht. Es gibt nur eine Ort, an dem MethodB() genannt wird. Das ist von __init__() en classA .

Sie würden die folgende Ausgabe erwarten:

In classA __init__
In methodB
End of __init__

Aber scheinbar zufällig erhalten entweder die oben genannten korrekte Ausgabe oder:

In classA __init__
In methodB
End of __init__
In methodB

Der Stacktrace zeigt, dass methodB wird das zweite Mal aufgerufen von __init__ . methodB sollte nur einmal aufgerufen werden. Wenn es ein zweites Mal aufgerufen wird, würden Sie erwarten, dass die andere Logik in __init__ auch zweimal gemacht werden. Aber nichts davor oder danach methodB ausgeführt wird und es keine Rekursion gibt.

Normalerweise würde ich SO nicht für meine Fehlersuche verwenden, aber in diesem Fall habe ich mir schon eine Weile den Kopf zerbrochen.

Version: 2.5.2 r252:60911

vielen Dank im Voraus

Editar Einige Hinweise darauf, dass das Problem woanders liegen könnte .... Die obigen Änderungen am Snippet führen zu der merkwürdigen Ausgabe 1 pro 250 oder so Treffer. Was seltsam ist.

Je mehr vor dem Druck von "In methodB" ausgegeben wird, desto mehr wird anschließend falsch gedruckt ... im Durchschnitt, nicht im direkten Verhältnis. Das macht es sogar in Lynx.

Ich gehe zurück ans Zeichenbrett.

(

Als Antwort auf die Antwort

Es scheint, dass mod_python und Apache Eheprobleme haben. Ein Neustart und die Dinge sind für ein paar Anfragen in Ordnung. Dann läuft alles zunehmend aus dem Ruder. Bei der Ausgabe von

/etc/rc.d/init.d/httpd stop

Es dauert unheimlich lange. Außerdem wird der Arbeitsspeicher durch Anfragen aufgefressen. Ich bin mit den Interna des Apache nicht so vertraut, aber es fühlt sich wie (dank Nadia), dass die Themen lebendig bleiben und zufälliges Einmischen auf Anfragen. Das ist schlicht und ergreifend verrückt.

Umstellung auf mod_wsgi, wie von S. Lott und Nadia vorgeschlagen

nochmals vielen Dank!!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X