gpt4 book ai didi

python - 非阻塞主机名解析?

转载 作者:太空宇宙 更新时间:2023-11-03 16:00:40 24 4
gpt4 key购买 nike

寻找一种方法来解析给定的完全限定域名的 IPv4/IPv6 地址,但时间有限。

我已经用标准的 Ruby 库尝试了几种方法,但它们都阻塞了其他线程,因此超时异常无法生效:

Timeout.timeout(1) {addr = Socket.sockaddr_in 80,'google.com'}
Timeout.timeout(1) {addr = Socket.getaddrinfo 'google.com','http',nil,:STREAM}
Timeout.timeout(1) {addr = Socket.gethostbyname 'google.com'}

当 DNS 响应缓慢或暂时无法访问时,上述所有尝试都不会在大约 60 秒内停止,而不是给定 1 秒。

我知道 adns但它通常不可用,需要安装额外的软件包。

还有其他解决办法吗?

最佳答案

最简单的方法是将域查询放在一个线程/进程中,然后定期检查我们是否从中获取了信息。

编辑:至于如何做到这一点,这里有一个简单的 python 示例:

from multiprocessing import Pool
import socket
import time

def lookup(host):
return socket.gethostbyname(host)

if __name__ == "__main__":
pool = Pool(processes=4)
result = pool.apply_async(lookup, ("google.com",))
done = 0
while done < 60: # Here we do something weird while domain lookups work in background
print(done)
done += 1
time.sleep(1)

# Now we need the domain details so we get em
print(result.get(1)) # 1 second timeout since it already had 60 seconds to process

Gil 与它无关,因为查找函数将在单独的进程中执行,具有自己的执行堆栈。您可以在 excellent python manpages 上阅读更多有关多处理选项的信息。 .

关于python - 非阻塞主机名解析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26206102/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com