【协程】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()本文来自博客园,作者:郭祺迦,转载请注明原文链接:https://www.cnblogs.com/guojie-guojie/p/16330280.html

浙公网安备 33010602011771号