1.信号量

import asyncioimport timeimport aiohttpfrom main import timethissemaphore = asyncio.Semaphore(3) # 10并发度urls = [ f'https://www.cnblogs.com/sitehome/p/{page}' for page in range(1,10)]async def async_craw(url): print('start craw url',url) async with semaphore: async with aiohttp.ClientSession() as session: async with session.get(url) as resp: result = await resp.text() await asyncio.sleep(5) print(f'end craw url:{url},time:{len(result)}')loop = asyncio.get_event_loop()tasks = [ loop.create_task(async_craw(url)) for url in urls]@timethisdef do_main(): loop.run_until_complete(asyncio.wait(tasks))if __name__ == '__main__': do_main() ################### do_main 15.98940396308899