python - 真的很奇怪(mod)_python问题

标签 python debugging mod-python

这个很难解释!

我正在编写一个通过 mod_python 运行的 python 应用程序。对于每个请求,返回的输出都不同,即使逻辑是“固定的”。

我有两个类,classAclassB。这样:

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 中的 __init__()

您会期望以下输出:

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

提前致谢

编辑 一些线索表明问题可能出在其他地方......以上对代码片段的更改会导致每 250 次左右的点击都会出现奇怪的输出 1。这很奇怪。

打印“In methodB”之前的输出越多,随后打印的错误就越多......平均而言,不是成正比。它甚至在 Lynx 中也能做到这一点。

我要回到绘图板。

:(

回应答案

mod_python 和 Apache 的婚姻似乎出现了问题。重新启动后,对于一些请求来说一切都很好。然后一切就变得越来越梨形。发行时

/etc/rc.d/init.d/httpd stop

这需要很长的时间。 RAM 也被请求耗尽。我不太熟悉 Apache 的内部结构,但感觉(感谢 Nadia)线程保持事件状态并随机插入请求。这简直是​​疯了。

按照 S.Lott 和 Nadia 的建议转向 mod_wsgi

再次感谢!!

最佳答案

我之前在 mod_python 中见过类似的行为。通常这是因为 apache 正在运行多个线程,其中一个线程正在运行旧版本的代码。当您刷新页面时,具有旧代码的线程可能正在为该页面提供服务。我通常通过停止 apache 然后重新启动来解决这个问题

sudo /etc/init.d/apache stop
sudo /etc/init.d/apache restart

自行重启并不总是有效。有时即使这样也不起作用!这可能听起来很奇怪,但在那些没有任何效果的极少数情况下,我的最后手段是在处理程序的第一行添加一个 raise Exception() 语句,刷新页面,重新启动 apache,然后刷新再次页面。每次都有效。必须有更好的解决方案。但这对我有用。 mod_python 肯定能让人发疯!

我希望这会有所帮助。

关于python - 真的很奇怪(mod)_python问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/927759/

相关文章:

javascript - 单击()或触发器( 'click')不起作用

javascript, ajax - 通过 ajax 通过 API 调用更新 HTML 页面

python 2.6.4 不支持 mod_python?

python - 检查值是否位于区间内

python - 打印字符串的幂集

python - 如何提高报告处理时间(Django/MySQL)?

python - BigQuery python 插入记录 (\w client.insert_rows)

java - 请参阅 Java EE eclipse 调试中的 POST 参数

python - 浏览器检测 Python/mod_python?