Sockets Python socket.getdefaulttimeout()为None,但获取“timeout:timed out”

Sockets Python socket.getdefaulttimeout()为None,但获取“timeout:timed out”,sockets,python-2.7,timeout,Sockets,Python 2.7,Timeout,如何确定导致堆栈以下跟踪的数值超时值 。。。 文件/usr/lib/python2.7/httplib.py,第548行,已读 s=self.\u safe\u readself.length 文件/usr/lib/python2.7/httplib.py,第647行,处于安全读取状态 chunk=self.fp.readminamt,MAXAMOUNT 文件/usr/lib/python2.7/socket.py,第380行,已读 数据=self.\u sock.recvleft 超时:超时

如何确定导致堆栈以下跟踪的数值超时值

。。。 文件/usr/lib/python2.7/httplib.py,第548行,已读 s=self.\u safe\u readself.length 文件/usr/lib/python2.7/httplib.py,第647行,处于安全读取状态 chunk=self.fp.readminamt,MAXAMOUNT 文件/usr/lib/python2.7/socket.py,第380行,已读 数据=self.\u sock.recvleft 超时:超时

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

我的代码没有设置任何默认或其他AFAICT超时值。我还没有发现任何第三方图书馆正在这样做的迹象

很明显,系统中的某个地方有超时。我想知道数值,这样我就可以在接近系统时使其后退

这是ubuntu 12.04下的python 2.7

编辑:


连接是与localhost的对话,CouchDB在127.0.0.1上监听,因此NAT不应该成为问题。超时仅在数据库负载较重时发生,这对我来说意味着它仅在数据库正在备份且无法足够快地响应请求时发生,这就是为什么我想知道超时是什么,因此,当响应时间超过50%的超时时,我可以跟踪响应时间并限制传入的请求。

我不知道更多信息,我猜想NAT跟踪将因长时间不活动而过期,不幸的是,在大多数情况下,您无法发现确切的超时值。如果可能的话,解决方法是在协议中引入某种保持活动的数据包。

发生这种情况时,您能提供更多信息吗?是不是在电线上长时间不活动之后?或者客户是纳特的幕后黑手?@RobertT:对不起,我应该在开始时就提供这个。请参见编辑。