非常奇怪(mod)\u python问题

非常奇怪(mod)\u python问题,python,debugging,mod-python,Python,Debugging,Mod Python,这个很难解释 我正在编写一个通过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")

这个很难解释

我正在编写一个通过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()
。这是来自
classA
中的
\uuuuu init\uuuuu()

您将期望以下输出:

In classA __init__
In methodB
End of __init__
但是,似乎是随机获得上述正确输出或:

In classA __init__
In methodB
End of __init__
In methodB
stacktrace显示
方法B
正在从
\uuuu init\uuuu
第二次调用<代码>方法B只应调用一次。如果第二次调用它,您会期望
\uuuu init\uuuu
中的其他逻辑也执行两次。但是在
methodB
之前或之后没有执行任何操作,也没有递归

我通常不会在调试时使用SO,但我对此挠头已有一段时间了

版本:2.5.2 r252:60911

提前感谢

编辑 一些线索表明问题可能在别处。。。。对代码段的上述更改会导致每250次左右的命中中有1次奇怪的输出。这很奇怪

“在方法B中”打印前的输出越多,随后错误打印的越多。。。平均而言,不是成正比的。它甚至在山猫身上也能做到

我要回到绘图板上

:(

回答 看起来mod_python和Apache有婚姻问题。重启后,一些请求就可以了。然后一切都变得越来越像梨形了。当

/etc/rc.d/init.d/httpd stop
这需要花费相当长的时间。RAM也被请求吞噬了。我对Apache的内部结构不太熟悉,但感觉(多亏了Nadia)线程仍然活着,在请求时随机插入。这简直是疯了

按照S.洛特和纳迪亚的建议,转到摩登wsgi


再次感谢!!

我真的不知道,但是构造函数不应该返回任何内容,所以请删除
返回None
。即使他们可以返回内容,如果函数本身不返回任何内容,也会自动返回
None

我认为在MethodB中需要一个
self
参数


编辑:可以显示更多代码吗?这很好。

我以前见过mod_python的类似行为。通常是因为apache正在运行多个线程,其中一个线程正在运行较旧版本的代码。刷新页面时,很可能是使用较旧代码的线程正在为页面提供服务。我通常通过停止更新来修复此问题然后重新启动它

sudo /etc/init.d/apache stop
sudo /etc/init.d/apache restart
独立重启并不总是有效的。有时甚至不起作用!这听起来可能有点奇怪,但在少数情况下,我最后的办法是添加一个
raiseexception()
处理程序第一行的语句,刷新页面,重新启动apache,然后再次刷新页面。每次都是这样。一定有更好的解决方案。但这对我来说是可行的。mod_python肯定会让人发疯


我希望这会有所帮助。

你打算省略“自我”吗在MethodB上?妈的,剪得太多了,我编辑不好。请用大写字母表示类名,小写字母表示方法名。请发布一段代码,说明问题所在。您发布的内容按预期工作。当它工作时帮不了什么忙。@S.Lott-我同意它应该工作。除了用'req.write()替换'print'之外“还有一堆不相关的列表分配。差不多就是这样。@艾登:我不否认你有问题。这个片段实际上是有效的。因此,你必须制作一个片段,它实际上无法为我们提供任何有用的建议。是的,这些错误与我的来源不一致,所以我编辑了这个问题,它仍然有效。它将是其中之一。”那些无聊的时刻。+1分用于阅读。我知道这可能是徒劳的,因为这是一个非常奇怪的演示。:)谢谢!这似乎是可行的。重新启动后,错误率似乎从低增加到高。重启后一切正常。。。然后是一个“方法B”,然后是3,然后是2,然后是5,然后又是1。@Aiden,相信我,我见过很多奇怪的案例。但我希望我疯狂的解决方案能对你有用。我根本不建议任何人使用mod_python@娜迪亚-谢谢:)很晚了。。。我想我明天会头脑清醒地回到这件事上来。将安装mod_wsgi并试一试。害怕PHP而不看选项:)@Nadia谢谢:)我从没想过会得到答案@我开始认为,当你很久以前提到wsgi时,我应该抛弃mod_python。但是,python和所有这些都是新的