gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 22:07:58 28 4
gpt4 key购买 nike

这个很难解释!

我正在编写一个通过 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com