这个很难解释!
我正在编写一个通过 mod_python 运行的 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
提前致谢
编辑 一些暗示问题可能出在其他地方的线索....对代码段的上述更改会导致每 250 次左右的点击中出现奇怪的输出 1。这很奇怪。
打印“In methodB”之前的输出越多,随后打印的错误就越多……平均而言,不是直接比率。它甚至在 Lynx 中也是如此。
我要回到绘图板上。
:(
作为回应
mod_python 和 Apache 似乎有婚姻问题。重新启动,对于一些请求来说一切都很好。然后一切都变得越来越梨形。发行时
/etc/rc.d/init.d/httpd stop
这需要很长的时间。RAM 也被请求吞噬了。我对 Apache 的内部结构不是很熟悉,但感觉就像(感谢 Nadia)线程保持活动状态并随机对接请求。这简直是疯了。
按照 S.Lott 和 Nadia 的建议迁移到 mod_wsgi
再次感谢!!