You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何I/O密集型Python多线程脚本线程数超限后性能反而下降?

Python多线程处理I/O密集任务时线程数过多导致性能下降的问题

环境配置

  • Python版本:3.8
  • 操作系统:Ubuntu 20.04
  • 任务:并发下载并处理数千个网页

问题现象

当使用最多10个线程时,性能如预期提升;但线程数超过10后,性能显著下降,达到50个线程时,性能甚至比单线程还差!

火焰图分析

通过火焰图可视化CPU使用率,发现大量时间消耗在锁竞争上。疑惑的是,这是Python的全局解释器锁(GIL)对I/O密集型线程造成的影响,还是存在其他形式的锁竞争?

代码示例

import threading
import requests

def download_page(url):
    response = requests.get(url)
    # 模拟处理过程
    return len(response.content)

urls = ["http://example.com"] * 1000

def worker():
    while urls:
        url = urls.pop()
        print(f"已下载 {download_page(url)} 字节")

threads = []
for _ in range(50):  # 在此处调整线程数量
    thread = threading.Thread(target=worker)
    threads.append(thread)
    thread.start()

for thread in threads:
    thread.join() 

已尝试的排查措施

  • GIL认知:了解Python的GIL可能成为性能瓶颈,但由于是I/O密集型任务,原本认为多线程会带来收益。
  • 资源限制:检查了系统资源限制(ulimit),确认线程数无限制。
  • 线程池执行器:尝试使用concurrent.futures.ThreadPoolExecutor替代手动管理线程,但问题仍存在。

疑问

既然是I/O密集型任务,为何增加线程数会导致性能下降?GIL仍可能是影响因素,还是存在其他形式的锁竞争?

内容的提问来源于stack exchange,提问作者comp-era

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 02:58:16