【协程】14、补充:限制并发数量Semaphore

  • 假如你的并发达到2000个,程序会报错:ValueError:too many file descriptors in select()。报错的原因字面上看是Python调取的select对打开的文件有最大数量的限制,这个其实是操作系统的限制,Linux打开文件的最大数默认是1024,Windows默认是509,超过这个值,程序就开始报错。个人推荐限制并发数的方法,设置并发数为100-500,处理速度更快。
#目标网站
url = 'https://www.baidu.com/'

#采集程序
async def hello(url,semaphore):
    async with semaphore:
        async with aiohttp.ClientSession() as session:
            async with session.get(url) as response:
                return await response.read()

# 预处理函数
async def run():
    semaphore = asyncio.Semaphore(500) # 限制并发量为500
    to_get = [hello(url.format(),semaphore) for _ in range(1000)] #总共1000任务
    await asyncio.wait(to_get)


if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.run_until_complete(run())
    loop.close()
posted @ 2022-05-31 14:12  郭祺迦  阅读(356)  评论(0)    收藏  举报