连接服务器时如何避免程序卡住
How to avoid program freezing when connecting to server
我有一个小脚本可以过滤那些还没有注册的域名。我使用 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
也许你可以试试 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))
该方法容易发生变化(如果底层库发生变化),但是,您可以调用内部套接字函数为所有pythonwhois 网络调用设置超时时间。例如:
TIMEOUT = 5.0 # timeout in seconds
pythonwhois.net.socket.setdefaulttimeout(TIMEOUT)
pythonwhois.get_whois("example.com")
我有一个小脚本可以过滤那些还没有注册的域名。我使用 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
也许你可以试试 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))
该方法容易发生变化(如果底层库发生变化),但是,您可以调用内部套接字函数为所有pythonwhois 网络调用设置超时时间。例如:
TIMEOUT = 5.0 # timeout in seconds
pythonwhois.net.socket.setdefaulttimeout(TIMEOUT)
pythonwhois.get_whois("example.com")