этот трудно объяснить!Действительно странно (mod) _python problem
Я пишу приложение python для запуска через mod_python. При каждом запросе возвращаемый выход отличается, хотя логика «фиксирована».
У меня есть два класса, classA
и classB
. Такой, что:
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
Который является сильно отрезала версия о том, что у меня есть. Но материал, который я отключил, не меняет поток управления. Существует только один место, где вызывается MethodB()
. То есть от __init__()
в classA
.
Можно ожидать, что следующий вывод:
In classA __init__
In methodB
End of __init__
Однако, казалось бы, случайно либо получить выше правильный вывод или:
In classA __init__
In methodB
End of __init__
In methodB
StackTrace показывает, что methodB
вызывается во второй раз от __init__
, methodB
следует вызывать только один раз. Если он будет вызван во второй раз, вы ожидаете, что другая логика в __init__
будет сделана дважды. Но ничего до или после methodB
не выполняется, и нет рекурсии.
Я бы обычно не прибегал к использованию SO для моей отладки, но я некоторое время царапал себе голову.
Версия: 2.5.2 R252: 60911
заранее спасибо
Редактировать Некоторые подсказки о том, что проблема может быть в другом месте .... Вышеуказанные изменения в результате сниппета в странный выход 1 каждые 250 или около того. Что странно.
Чем больше выходных данных перед печатью «В методе B», тем больше он печатается впоследствии неправильно ... в среднем, а не в прямом отношении. Это даже делает это в Lynx.
Я возвращаюсь к чертежной доске.
:(
В ответ на ответ
кажется mod_python и Apache возникают проблемы в браке. Перезагрузка и все в порядке в течение нескольких запросов. Тогда все идет более грушевидный. При выдаче
/etc/rc.d/init.d/httpd stop
он принимает причудливо долгое количество времени. Кроме того, RAM становится съеден с запросами. Я не знаком с внутренним Apache, но чувствует как (спасибо Надя), что потоки остаются живыми и случайным образом прикладом в по запросам. Это простые бредеры.
Переезд в mod_wsgi as S.Lott и Nadia предложили
еще раз спасибо!
Вы намеревались оставить «я» на MethodB? –
Дерьмо, слишком много сна, плохое редактирование. –
Пожалуйста, используйте верхний регистр для имен классов и строчные буквы для имен методов. И, пожалуйста, опубликуйте фрагмент, который показывает проблему. Материал, который вы опубликовали, работает так, как ожидалось. Не может помочь, когда это работает. –