我正在尝试学习异步,现在我正在尝试获取批域的whois信息。我找到了这个库aiowhois,但信息很少,对于像我这样的新手来说还不够。这段代码可以正常工作,但我不知道如何从parused_whois变量(协程对象)中打印数据。请帮助。
对不起,我的英语,我不太流利
resolv = aiowhois.Whois(timeout=10)
async def coro(url, sem):
parsed_whois = await resolv.query(url)
async def main():
tasks = []
sem = asyncio.Semaphore(4)
for url in domains:
task = asyncio.Task(coro(url, sem))
tasks.append(task)
await asyncio.gather(*tasks)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
all_parsed_whois = [] # make a global
async def coro(url, sem):
all_parsed_whois.append(await resolv.query(url))
如果您希望数据尽快可用,您可以task.add_done_callback()
您可以避免使用任务。只需将收集直接应用于协程。
并且您可以使每个协程返回其结果,而无需求助于全局变量:
async def coro(url, sem):
return await resolv.query(url)
async def main():
domains = ...
ops = [coro(url) for url in domains]
rets = await asyncio.gather(*ops)
print(rets)
请参阅official docs,以了解有关如何使用gather
或wait
或更多选项的更多信息
注意,如果您使用的是最新的python版本,则也可以仅使用以下命令简化循环运行:>
asyncio.run(main())