首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连接服务器时如何避免程序冻结

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

Stack Overflow用户
提问于 2015-05-24 18:12:20
回答 2查看 883关注 0票数 1

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

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

你有什么建议如何避免冰冻吗?还是检查域名的更好方法?

以下是代码:

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-24 21:00:07

但是,这个方法很容易改变(如果底层库发生变化),您可以调用内部套接字函数来设置所有pythonwhois网络调用的超时。例如:

代码语言:javascript
复制
TIMEOUT = 5.0 # timeout in seconds
pythonwhois.net.socket.setdefaulttimeout(TIMEOUT)
pythonwhois.get_whois("example.com")
票数 4
EN

Stack Overflow用户

发布于 2015-05-24 19:45:01

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

代码语言:javascript
复制
import dns.resolver

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

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

要使它成为多线程,如果您可以使用python3,那么线程池将是最好的选择:

代码语言:javascript
复制
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))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30426727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档