【发布时间】:2009-05-29 19:38:24
【问题描述】:
这个很难解释!
我正在编写一个通过 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
堆栈跟踪显示 methodB 第二次从 __init__ 调用。 methodB 只能调用一次。如果它被第二次调用,你会期望__init__ 中的其他逻辑也被执行两次。但methodB 之前或之后都没有执行,也没有递归。
我通常不会求助于使用 SO 进行调试,但我在这方面一直摸不着头脑。
版本:2.5.2 r252:60911
提前致谢
编辑 一些线索表明问题可能出在其他地方.... 以上对 sn-p 的更改导致每 250 次左右的点击中出现奇怪的输出 1。这很奇怪。
打印“In methodB”之前的输出越多,随后打印的错误就越多……平均而言,不是直接比率。它甚至在 Lynx 中也能做到。
我要回到绘图板了。
:(
回应回答
看来 mod_python 和 Apache 有婚姻问题。重新启动,对于一些请求来说一切都很好。然后一切都变得越来越梨形。发行时
/etc/rc.d/init.d/httpd stop
这需要很长的时间。 RAM 也被请求吞噬了。我对 Apache 的内部结构不太熟悉,但 感觉 就像(感谢 Nadia)线程保持活跃并且 随机插入 请求。这简直是疯了。
按照 S.Lott 和 Nadia 的建议迁移到 mod_wsgi
再次感谢!!
【问题讨论】:
-
您是否打算在 MethodB 上省略“自我”?
-
见鬼,剪辑太多,编辑不当。
-
请使用大写的类名和小写的方法名。请发布一个显示问题的sn-p。您发布的内容按预期工作。当它起作用时无济于事。
-
@S.Lott - 我同意它应该可以工作。除了用 'req.write()' 和一堆不相关的列表分配替换 'print' 之外。差不多就是这样。
-
@Aiden:我不否认你有问题。 sn-p 确实有效。因此,您必须制造一个实际上无法让我们提供任何有用建议的 sn-p。
标签: python debugging mod-python