Python concurrent.futures 实战:用 ThreadPoolExecutor 并发处理 + as_completed 收结果你手头有 200 个 URL 要抓,串行 requests.get 一个个跑,每个网络往返 300ms,光等待就是一分多钟,CPU 全程在打瞌睡。这类「一堆各自独立、主要在等 IO」的活儿,正是线程池的主场。但很多人第一次用 ThreadPoolExecutor 就踩坑:要么用 map 拿不到异常,要么用 submit 后不知道怎么优雅地边完成边收结果。这篇把这些坑一次讲清楚。