如何避免程序冻结连接到服务器



我有一个小脚本,过滤那些尚未注册的域名。我使用pywhois模块。问题是,在几个(有时是数百个)请求之后,它突然冻结并且什么也不做。我认为这不是一个禁令,因为我可以在冻结后立即运行程序,它可以工作。

我想避免这种冻结。我的想法是计算函数的运行时间,如果时间跨越一些线(例如10秒),它会重复代码。

你有什么建议如何避免结冰吗?或者更好的检查域名的方法?

代码如下:

for keyword in keywords:
        try:
            details = pythonwhois.get_whois(keyword+'.com')
        except Exception as e:
            print e
            continue
        if 'status' not in details.keys():
            print 'Free domain!'
            print keyword

此方法容易更改(如果底层库更改),但是,您可以调用内部套接字函数为所有pythonwhois网络调用设置超时。例如:

TIMEOUT = 5.0 # timeout in seconds
pythonwhois.net.socket.setdefaulttimeout(TIMEOUT)
pythonwhois.get_whois("example.com")

也许你可以试试dnspython。看起来你只是想检查一个域名是否注册了。例如:

import dns.resolver
for keyword in keywords:
    try:
        dns.resolver.query(keyword+'.com')
    except dns.resolver.NXDOMAIN:
        print(keyword+'.com is available!')

DNS解析器的默认超时时间为2秒。如果你想改变这一点,你可以用不同的timeout创建一个新的dns.resolver.Resolver实例。

要使其多线程,如果可以使用python3:

,则线程池将是最佳选择。
from multiprocessing import Pool
def check_keyword(keyword):
    try:
        dns.resolver.query(keyword+'.com')
    except dns.resolver.NXDOMAIN:
        # You probably want to change this to a return
        print(keyword+'.com is available!') 
if __name__ == '__main__':
    keywords = [...]
    p = Pool(5)
    print(p.map(check_keyword, keywords))

相关内容

  • 没有找到相关文章

最新更新