Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在urlopen上设置计时器,以便在连接超时时尝试重新连接_Python_Urllib_Urlopen - Fatal编程技术网

Python 在urlopen上设置计时器,以便在连接超时时尝试重新连接

Python 在urlopen上设置计时器,以便在连接超时时尝试重新连接,python,urllib,urlopen,Python,Urllib,Urlopen,我有一个关于Python 2.7的问题。urlopen功能有时由于互联网故障而无法连接。所以我想在它上面添加一个计时器,这样当连接超时时,它会关闭上一个连接并再次尝试重新连接。在我的实现中,它将陷入一个死循环,一次又一次地“尝试重新连接”。。。有人能帮我吗?多谢各位 def getConnection(urlItem, keywords, address): urlItem.close() print "Trying to reconnect..." findArticl

我有一个关于Python 2.7的问题。
urlopen
功能有时由于互联网故障而无法连接。所以我想在它上面添加一个计时器,这样当连接超时时,它会关闭上一个连接并再次尝试重新连接。在我的实现中,它将陷入一个死循环,一次又一次地“尝试重新连接”。。。有人能帮我吗?多谢各位

def getConnection(urlItem, keywords, address):
    urlItem.close()
    print "Trying to reconnect..."
    findArticles(keywords, address)

def findArticles(keywords, address):
    urlItem = urllib.urlopen(address)
    t = Timer(20.0, getConnection(urlItem, keywords, address))
    t.start()
    htmlSource = urlItem.read()
    t.cancel()
以下是我得到的一个例外:

  File "/usr/lib/python2.7/urllib.py", line 84, in urlopen
    return opener.open(url)
  File "/usr/lib/python2.7/urllib.py", line 205, in open
    return getattr(self, name)(url)
  File "/usr/lib/python2.7/urllib.py", line 342, in open_http
    h.endheaders(data)
  File "/usr/lib/python2.7/httplib.py", line 951, in endheaders
    self._send_output(message_body)
  File "/usr/lib/python2.7/httplib.py", line 811, in _send_output
    self.send(msg)
  File "/usr/lib/python2.7/httplib.py", line 773, in send
    self.connect()
  File "/usr/lib/python2.7/httplib.py", line 754, in connect
    self.timeout, self.source_address)
  File "/usr/lib/python2.7/socket.py", line 553, in create_connection
    for res in getaddrinfo(host, port, 0, SOCK_STREAM):
IOError: [Errno socket error] [Errno -2] Name or service not known

旧的urllib库本身不支持设置超时,但支持设置超时。您应该考虑使用urllib2,也就是说

您可以导入套接字并在所有新创建的套接字上设置默认超时。这可能是一种迂回的方式来做你需要做的事情


当我尝试使用urllib拉取网站时,当我无法访问该网站时,会出现IOError。我想当你的连接超时时,你也会得到同样的结果?我刚测试了一下,没插上电源,结果出了个错误。你如何调用你的函数?您应该收到一个会中断脚本执行的错误。您是在Try/Except中调用这些函数吗?我得到以下信息:IOError:[Errno socket error][Errno-2]名称或服务未知。我没有使用Try/Except…预期效果是什么。函数是否继续循环直到可以加载页面?还是跳过这一页,试试下一页?@0xhughes谢谢你的建议!我实现了一个Try/Except,它很有效。谢谢你的建议!我使用urlib2和try异常块来获得一种迂回的方式。