python socket.gethostbyaddr() -- 减少超时?

问题描述 投票:0回答:3
当它的参数是真实的主机名时,

socket.gethostbyname()
效果很好。但是当它是一个不存在的主机时,我会得到 3 秒超时,然后是

socket.gaierror: [Errno 11001] getaddrinfo failed

我不介意例外(这是合适的),但是有什么办法可以减少超时吗?

python dns ip-address
3个回答
2
投票

经过此操作后,一个简单的解决方案是:

import socket
socket.setdefaulttimeout(5) #Default this is 30
socket.gethostbyname(your_url) 

1
投票

如果Python使用系统

gethostbyname()
,这是不可能的。我不确定您是否真的想要这个,因为您可能会收到错误的超时。

有一次我遇到了类似的问题,但是来自 C++:我必须调用大量名称的函数,所以长时间的超时确实很痛苦。一个解决方案是从许多线程并行调用它,因此虽然其中一些线程卡在等待超时,但所有其他线程都运行良好。


0
投票

我对线程很陌生,但我尝试实现@Andriy Tylychko 使用线程的建议。

from threading import Thread
import time

def is_ip_connected(IP, timeout=2):
    ans = {"success": False}

    def _is_ip_connected(IP, ans):
        try:
            socket.gethostbyaddr(IP)
            ans["success"] = True
        except:
            pass

    time_thread = Thread(target=time.sleep, args=(timeout,))
    IP_thread = Thread(target=_is_ip_connected,  kwargs={"IP": IP, "ans": ans})

    time_thread.start()
    IP_thread.start()

    while time_thread.is_alive() and IP_thread.is_alive():
        pass

    return(ans["success"])


print(is_ip_connected(IP="192.168.1.202"))
© www.soinside.com 2019 - 2024. All rights reserved.