长时间运行后永久出现“名称解析临时失败”

21 投票
2 回答
21065 浏览
提问于 2025-04-17 07:32

在Linux上运行了几个小时后,我的Python 2.6程序开始出现这个错误,每次请求都会报错:

<class 'urllib2.URLError'> URLError(gaierror(-3, '临时名称解析失败'),)

如果我重启程序,它又可以正常工作了。我猜可能是某种资源耗尽的问题,但我不知道该怎么检查。请问我该如何诊断和解决这个问题?

2 个回答

0

我也遇到过同样的问题。在我的情况下,问题不是因为资源耗尽,而是因为我的DHCP服务器更改了名字服务器的地址。libc(一个处理系统调用的库)不想更新,还是使用之前的缓存文件,导致我每次地址变化时都得重启脚本。

在这种情况下,我所有的Python套接字连接尝试都失败了。于是我找到了一段代码,它解决了这个问题:

import ctypes
try:
    libc = ctypes.CDLL('libc.so.6')
    res_init = getattr(libc, '__res_init')
    res_init(None)
except:
    pass

在调用socket.connect之前使用这段代码,希望能帮到你。

19

这个问题是因为一个库没有正确关闭连接,导致很多连接卡在了CLOSE_WAIT状态。最终,这会因为资源耗尽而出现“临时名称解析失败”的错误。

撰写回答