Python socket.getdefaulttimeout()是None,但得到"超时:超时"

时间:2014-11-24 23:49:09

标签: sockets python-2.7 timeout

如何确定导致下面堆栈跟踪的数字超时值是什么?

... File "/usr/lib/python2.7/httplib.py", line 548, in read s = self._safe_read(self.length) File "/usr/lib/python2.7/httplib.py", line 647, in _safe_read chunk = self.fp.read(min(amt, MAXAMOUNT)) File "/usr/lib/python2.7/socket.py", line 380, in read data = self._sock.recv(left) timeout: timed out

导入我的模块后,socket.getdefaulttimeout()的结果为None(请注意,这与产生上述内容的情况不同,因为获取这些内容需要8小时的压力。系统)。

我的代码没有设置任何超时值(默认或其他)AFAICT。我还没有找到第三方库正在这样做的暗示。

显然系统中某处有一些超时。我想知道数值,这样我就可以在接近时关闭系统。

这是ubuntu 12.04下的python 2.7。

编辑:

连接到localhost(与在127.0.0.1上监听的CouchDB交谈),因此NAT不应成为问题。只有在DB负载很重的情况下才会发生超时,这意味着只有当数据库得到备份且无法快速响应请求时才会发生这种情况,这就是为什么我想知道超时是什么,所以我可以当响应时间超过50%的超时时间时,跟踪响应时间并限制传入请求。

1 个答案:

答案 0 :(得分:0)

不知道更多我的猜测是NAT跟踪由于长时间不活动而到期,很遗憾,在大多数情况下,您无法发现确切的超时值。如果存在这种可能性,解决方法是在协议中引入某种保持活动包。