异步IO实战:异步网络请求、异步文件读写
博客导语
学完理论必须落地实战。本文提供可直接上线的异步爬虫、异步文件读写案例,对比同步、多线程、异步性能差距,适合爬虫、后端接口、批量IO场景。
一、异步网络请求(aiohttp)
requests是同步阻塞,高并发爬虫必须用 aiohttp 异步请求。
import aiohttp import asyncio async def fetch(session, url): async with session.get(url) as resp: return await resp.text() async def main(): urls = ["https://www.baidu.com"]*10 async with aiohttp.ClientSession() as session: tasks = [fetch(session,url) for url in urls] results = await asyncio.gather(*tasks) print(len(results)) asyncio.run(main())二、异步文件读写(aiofiles)
普通open是阻塞IO,海量文件读写用异步极致提速。
import aiofiles import asyncio async def write_file(): async with aiofiles.open("async.txt","w",encoding="utf-8") as f: await f.write("异步文件写入内容") asyncio.run(write_file())三、三种并发方案最终选型总结
计算密集 →多进程
普通IO、少量并发 →多线程
海量IO、高并发爬虫/接口 →异步协程
