dieser ist schwer zu erklären!Wirklich seltsam (mod) _python Problem
Ich schreibe eine Python-Anwendung, die über mod_python ausgeführt werden soll. Bei jeder Anforderung unterscheidet sich die zurückgegebene Ausgabe, obwohl die Logik "fest" ist.
Ich habe zwei Klassen, classA
und 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
, die eine stark snipped Version von dem, was ich habe. Aber das Zeug, das ich geschnippelt habe, ändert den Kontrollfluss nicht. Es gibt nur einen Ort wo MethodB()
heißt. Das ist von __init__()
in classA
.
würden Sie erwarten, dass die folgende Ausgabe:
In classA __init__
In methodB
End of __init__
jedoch scheinbar zufällig entweder die oben korrekte Ausgabe erhalten oder:
In classA __init__
In methodB
End of __init__
In methodB
Der Stacktrace zeigt, dass methodB
ist das zweite Mal von __init__
aufgerufen wird . 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 durchgeführt wird. Aber nichts vor oder nach methodB
wird ausgeführt und es gibt keine Rekursion.
Normalerweise würde ich SO nicht zum Debuggen verwenden, aber ich habe mir eine Weile den Kopf darüber gekratzt.
Version: 2.5.2 R252: 60911
Dank im Voraus
bearbeiten Einige Hinweise, dass das Problem möglicherweise an anderer Stelle sein .... Die obigen Änderungen an das Code-Schnipsel Ergebnis in der seltsame Ausgabe 1 in jeder 250 oder so Treffern. Was ist seltsam.
Je mehr Ausgabe vor dem Ausdruck "In MethodeB", desto mehr wird es später falsch gedruckt ... im Durchschnitt, nicht im direkten Verhältnis. Es macht es sogar in Lynx.
Ich gehe zurück zum Zeichenbrett.
:(
Als Antwort auf Antwort
Es mod_python und Apache scheint Eheprobleme haben. Ein Neustart und Dinge sind in Ordnung für ein paar Anfragen. Dann geht alles immer birnenförmig. Bei der Ausgabe
/etc/rc.d/init.d/httpd stop
es dauert unheimlich lange Menge an Zeit. auch RAM mit Anfragen aufgefressen wird immer. ich bin nicht mit Apache Interna vertraut, aber es fühlt sich wie (dank Nadia), dass Threads bleiben am Leben und nach dem Zufallsprinzip in auf Anfragen stoßen. Was ist einfach bonkers.
Umzug nach mod_wsgi als S.Lott und Nadia vorgeschlagen
danke nochmal !!
Haben Sie vor, das "Selbst" auf MethodB wegzulassen? –
Scheiße, zu viel schnippeln, schlecht bearbeiten. –
Verwenden Sie Großbuchstaben für Klassennamen und Kleinbuchstaben für Methodennamen. Und posten Sie bitte ein Snippet, das das Problem zeigt. Die Sachen, die du gepostet hast, funktionieren wie erwartet. Kann nicht viel helfen, wenn es funktioniert. –