多线程适合IO密集型任务,CPU密集型应选多进程;用ThreadPoolExecutor比原生threading更安全易管理;需注意线程安全、异常捕获与超时控制。

自动化脚本实现多线程处理,核心是让多个任务并行执行,提升整体效率,但不是所有场景都适合——IO密集型(如网络请求、文件读写)收益明显,CPU密集型(如大量计算)反而可能因GIL限制变慢,需优先考虑多进程。
明确任务类型,选对并发模型
先判断脚本主要耗时在哪:
- 频繁调用API、下载网页、读写硬盘 → 用 threading 或 concurrent.futures.ThreadPoolExecutor
- 做图像处理、数值运算、加密解密 → 改用 multiprocessing 或 concurrent.futures.ProcessPoolExecutor
- 既要异步响应又要高吞吐(比如爬虫+解析+存库)→ 可组合使用 asyncio + 线程池/进程池
用 ThreadPoolExecutor 快速上手多线程
比原生 threading 更安全、易管理。示例:同时请求10个URL
from concurrent.futures import ThreadPoolExecutor, as_completed
import requests
<p>def fetch_url(url):
try:
return url, requests.get(url, timeout=5).status_code
except Exception as e:
return url, f"Error: {e}"</p><p>urls = ["<a href="https://www.php.cn/link/5f69e19efaba426d62faeab93c308f5c">https://www.php.cn/link/5f69e19efaba426d62faeab93c308f5c</a>"] * 10</p><p>with ThreadPoolExecutor(max_workers=4) as executor:</p><h1>提交全部任务</h1><pre class="brush:php;toolbar:false;">futures = [executor.submit(fetch_url, u) for u in urls]
# 按完成顺序获取结果
for future in as_completed(futures):
url, result = future.result()
print(f"{url} → {result}")登录后复制
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~