从python协程对象中检索数据

问题描述 投票:0回答:2

我正在尝试学习异步,现在我正在尝试获取批域的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())
python coroutine whois asyncio
2个回答
1
投票
all_parsed_whois = []  # make a global

async def coro(url, sem):
    all_parsed_whois.append(await resolv.query(url))

如果您希望数据尽快可用,您可以task.add_done_callback()

python asyncio add_done_callback with async def


0
投票

您可以避免使用任务。只需将收集直接应用于协程。

并且您可以使每个协程返回其结果,而无需求助于全局变量:

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,以了解有关如何使用gatherwait或更多选项的更多信息

注意,如果您使用的是最新的python版本,则也可以仅使用以下命令简化循环运行:>

asyncio.run(main())
© www.soinside.com 2019 - 2024. All rights reserved.