SimpleXmlRpcServer_插座rcv数千次请求后冻结

2024-05-15 22:14:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在通过广域网处理来自多个XMLRPC客户端的请求。比如说,一天(有时是两天)的时间段内效果很好,然后就冻结了插座.py公司名称:

data = self._sock.recv(self._rbufsize)

在_sock.超时是-1_索克。盖特超时没有

在主线程中我没有做什么特别的事情(只是接收XMLRPC调用),还有两个线程在与DB对话。这两个线程都能正常工作,并在这个块中幸存下来(使用WinPdb进行了检查)。客户机发送的请求长度不超过1KB,并且没有任何特殊内容:只有字典中漂亮干净的字符串。在两次阻塞之间,我可以毫无问题地为成千上万的请求提供服务。 防火墙关闭,同一台机器上没有奇怪的软件,等等。。。在

我使用WindowsXP和Python2.6.4。我检查了2.6.4之间的差异。和2.6.5,没有发现任何重要的东西(或者我搞错了吗?)。2.7版本不是一个选项,因为我会错过MySqlDB的二进制文件。在

唯一经常发生的事情,由客户机有不良的互联网连接,是插座断裂。每5-10分钟就会发生这种情况(每2秒只有5个客户端访问服务器)。在

我在这个问题上花了很多时间,现在我开始不知道该怎么办了。任何提示或想法都将不胜感激。在


Tags: pyself名称客户端data客户机公司事情
2条回答

在你的操作系统的TCP/IP栈中到底发生了什么(可能是在最上面的python层中,但这种情况不太可能发生)是一个谜。作为一个实际的解决方法,我会设置一个比请求之间的延迟更长的超时(如果您希望每隔2秒发出一个请求,则10秒就足够了),如果发生了,请关闭并重新打开。(通过反复试验,校准在不中断正常交通的情况下解决冻结问题所需的延迟)。我知道,在没有理解问题的情况下进行修复是不愉快的,但在编写、部署和操作实际服务器系统的世界中,对这些事情保持务实是一个必要的生存特征。请务必为将来的维护人员准确地评论解决方法!在

非常感谢你的快速反应。在我收到后,我把超时时间增加到了10秒。现在一切运行正常,但我当然需要再等一两天才能得到确认,但只有5天后我才能确定,并会带着结果回来。我现在看到140K请求已经进行得很好了,在这个问题上有如此艰难的经验,我至少会再等20万

你提出的自动适应超时(不关闭系统)听起来也很合理。正确的方法是创建一个小类(例如AutoTimeoutCalibrator)并将其直接嵌入到serial.py?在

是的,务实是唯一不浪费10天时间去找出背后真正原因的方法。在

再次感谢,我会把结果告诉你的。 (抱歉,但由于某种原因,我无法将其作为对您帖子的回复)

相关问题 更多 >