Python线程报错:can't start new thread且系统运行缓慢求助
问题分析与解决方案
核心问题
- 线程数量超限:你创建了1000个线程,系统对同时运行的线程数有上限,超过后就会抛出
can't start new thread错误。 - 多线程无效且拖慢速度:Python的全局解释器锁(GIL)导致CPU密集型任务无法通过多线程并行执行,反而会因为线程切换产生额外开销,大幅降低运行速度。
- 代码效率低下:
- 嵌套循环逐个修改numpy数组元素,远不如numpy原生向量化操作高效。
- 循环中反复用
np.concatenate扩容数组,每次都会重新分配内存并复制数据,耗时极长。 - 多个线程同时修改同一个
matrix数组,会出现竞态条件,导致数据混乱。
优化后的代码
直接用numpy的向量化操作生成目标矩阵,无需多线程,代码简洁且速度极快:
import numpy as np # 直接生成1000×1000的矩阵,元素随机取0,1,2,3 test = np.random.choice([0, 1, 2, 3], size=(1000, 1000)) print(test)
如果需要生成10000×10000的矩阵,只需修改size参数:
test = np.random.choice([0, 1, 2, 3], size=(10000, 10000))
优化说明
- 向量化操作:numpy的内置函数是用C实现的,绕过了Python的循环开销,能充分利用CPU性能,生成10000×10000矩阵的速度会回到你之前的水平。
- 内存预分配:一次性生成目标大小的数组,避免了反复扩容的内存开销。
- 无线程开销:去掉不必要的多线程,消除线程切换和竞态条件问题。
内容的提问来源于stack exchange,提问作者Akito
相关产品推荐
相关产品推荐

