用 aiohttp 实现带并发信号量限制的批量抓取器
抓 500 个 URL,串行 requests 要跑七八分钟;直接 asyncio.gather(*tasks) 全量并发又容易被目标站限流、被本地文件描述符耗尽打回 OSError: [Errno 24] Too many open files。真正可用的做法是:协程模型 + asyncio.Semaphore 限流 + aiohttp.TCPConnec
抓 500 个 URL,串行 requests 要跑七八分钟;直接 asyncio.gather(*tasks) 全量并发又容易被目标站限流、被本地文件描述符耗尽打回 OSError: [Errno 24] Too many open files。真正可用的做法是:协程模型 + asyncio.Semaphore 限流 + aiohttp.TCPConnec
一、asyncio 解决了什么 Python 的 asynci…
很多人写 with 语句时只关心「打开、关闭」这一层,能跑通就不深究。可一旦业务里出现异常被悄悄吞掉、__exit__ 里抛出新的异常覆盖了原始异常、或者 GeneratorExit 让 @contextmanager 报出 RuntimeError: generator didn't stop after throw(),就会调上一两个小时。这篇文章把 w
asyncio 里"超时"和"取消"是一件事的两面:超时本质上是到点发取消信号。但很多代码只包了 wait_for 就以为万事大吉,真正的问题往往出在被取消的任务不肯干净退出。 最基础的写法 async def fetch(session,