我如何动态处理大量协程返回的值(异步问题?)>

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

我要抓取的网址列表非常多。起初,我正在考虑做这样的事情:

async def main(username, password):
    sem = asyncio.Semaphore(100)
    async with aiohttp.ClientSession() as session:
        await login(session, username, password)
        tasks = [asyncio.create_task(r_search(sem, session, url)) for url in hugenumberofurls]
        texts = await asyncio.gather(*tasks)

但是,当然要花很长时间,我想实时处理结果(解析+写入文件)。实现这个目标的最有效方法是什么?

我是否应该分割大量的URL,然后执行:

async def main(username, password):
    async with aiohttp.ClientSession() as session:
        await login(session, username, password)
        sem = asyncio.Semaphore(100)
        for chunk in chunk(hugenumberofurls):
            tasks = [asyncio.create_task(r_search(sem, session, url)) for url in chunk]
            texts = await asyncio.gather(*tasks)
            process(texts)

[我相信这可能会浪费时间,因为process()可能需要几分钟才能用于继续下载网址...

我很乐意接受任何建议,对于新手来说asyncio和aiohttp很难!

我要抓取的网址列表非常多。起初,我正在考虑执行以下操作:async def main(用户名,密码):sem = asyncio.Semaphore(100)与...

python-3.x python-asyncio python-3.7 aiohttp
1个回答
0
投票

让我们使用两个模拟操作构建一个工作示例:

© www.soinside.com 2019 - 2024. All rights reserved.