Python 3.x 异步IO连接到套接字意外失败
我正试图通过whois使用以下代码查找大约10000个域Python 3.x 异步IO连接到套接字意外失败,python-3.x,python-asyncio,Python 3.x,Python Asyncio,我正试图通过whois使用以下代码查找大约10000个域 async def lookup(server, port, query, sema): async with sema as sema: try: reader, writer = await asyncio.open_connection(server, port) except: return {} writer.write(qu
async def lookup(server, port, query, sema):
async with sema as sema:
try:
reader, writer = await asyncio.open_connection(server, port)
except:
return {}
writer.write(query.encode("ISO-8859-1"))
await writer.drain()
data = b""
while True:
d = await reader.read(4096)
if not d:
break
data += d
writer.close()
data = data.decode("ISO-8859-1")
return data
但是,我反复出现错误“连接失败”。如果我尝试一次查找,它就会通过,这意味着whois服务器启动了。我还将ulimit增加到了10000,但我将使用信号量一次只能查找1000次。whois服务器几乎肯定会限制您的速率。并非所有whois服务器都能从单个IP地址扩展到1000个并发连接 进一步限制速率,降低信号量限制或切换到
或者,找到提供更高查询率选项的whois API提供程序,或者更好地支持批量查询。请不要使用一揽子异常处理程序。你在玩口袋妖怪,但你真的不想把它们都抓住。仅捕获特定的异常。因为您不想忽略
GeneratorExit
和MemoryError
和键盘中断
并假装它们是连接错误。您是否尝试过降低到whois服务器的连接数,从而降低信号量的限制?很可能whois服务器管理员不喜欢一次从一个IP地址连接1000个连接,并且限制您的速率?