我遇到的一个独特的URLError: <urlopen error timed out>错误

5 投票
2 回答
5938 浏览
提问于 2025-04-16 07:24

我在我的生产服务器上运行应用程序时,出现了这个错误:

File "/usr/lib/python2.6/urllib2.py", line 391, in open
   response = self._open(req, data)

 File "/usr/lib/python2.6/urllib2.py", line 409, in _open
   '_open', req)

 File "/usr/lib/python2.6/urllib2.py", line 369, in _call_chain
   result = func(*args)

 File "/usr/lib/python2.6/urllib2.py", line 1161, in http_open
   return self.do_open(httplib.HTTPConnection, req)

 File "/usr/lib/python2.6/urllib2.py", line 1136, in do_open
   raise URLError(err)

URLError: <urlopen error timed out>

顺便说一下,我明白这个错误的意思。但这并不是我最关心的。让我觉得有趣的是,当我在我的本地机器或测试服务器上运行时,一切都运行得很好。这实在是太烦人了。

我在所有地方使用的都是相同的操作系统:

ubuntu 10.04

这可能是什么原因呢?任何帮助都会很感激。

2 个回答

0

看起来生产环境的机器可能比你的测试机器或者本地机器要慢很多,这可能是因为生产环境的资源配置不足或者负载过重。所以你应该检查一下你的超时时间设置,确保没有不小心把全局超时时间设置得太严格。

这可能是和socket.setdefaulttimeout / socket.settimeout有关的问题。在Python 2.6中,调用urllib2.urlopen时应该可以接受一个超时参数。你可以试试用urllib2.urlopen(..., timeout=None)来看看这样是否能解决问题。

在调用urlopen之前,我建议你先确认一下socket.getdefaulttimeout的值。

1

你能在你的生产服务器上用 wget 命令获取这个网址吗?这可能是防火墙的问题,而不是Python的错误。

撰写回答