当前位置:首页>python>python 多线程 多进程 并行计算

python 多线程 多进程 并行计算

  • 2026-10-22 09:33:39
python 多线程 多进程 并行计算
python提供标准库concurrent.futures,可以方便实现多线程、多进程的管理。(用蒙特卡洛做批量标的定价的时候,计算量会非常大,纯用python在机器上跑循环的方式,耗时会极长)
from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutorimport randomimport timeimport requestsdeffunc(name):for i in range(200000):        a = 1        print(name, a)# for i in range(200000):#     a = random.uniform(1, 10)#     print(name,a)# for i in range(200000):#     a = random.uniform(1, 10)# for i in range(2000000):#     a = random.uniform(1, 10)# for i in range(20):#     a = requests.get("https://www.baidu.com")#     print(name,a)if __name__ == "__main__":    start_time = time.time()with ThreadPoolExecutor(5) as t:for i in range(10):            t.submit(func, name=f"{i}")# with ProcessPoolExecutor(5) as t:#     for i in range(10):#         t.submit(func, name=f"{i}")# for i in range(10):#     func(i)    end_time = time.time()    run_time = end_time - start_time    print("程序运行时间为:", run_time, "秒")    print("over")
计算耗时
多线程
多进程
单线程
print(IO密集)
13.74s
15.08s
12.62s
print(IO密集)
随机数生成(CPU密集)
16.96s
16.85s
15.36s
随机数生成(CPU密集),20万次
0.37s
0.75s
0.39s
随机数生成(CPU密集),200万次
3.66s
1.63s
3.70s
url request(IO密集),每轮请求20次
5.96s
6.61s
26.52s
1、多线程线程不是越多越好,多进程进程数最大内核数即可。
2、虽然print属于IO操作,但是设备间(CPU与显示器之间)响应速度很快,多线程由于线程切换耗时,不会比单线程有优势;而url request是和服务器之间的响应,会有明显的等待响应的时间,多线程此时优势明显。
3、GIL锁的存在,大多数CPU密集型多线程都无法实现并行计算。(但是,像NumPy或Pandas这样的库,其底层运算是用C编写的,在执行大规模矩阵运算时会释放GIL,此时使用多线程也可以达到并行效果【可以后续测试一下】。)
4、CPU计算量大时,采取多进程实现并行计算。

最新文章

随机文章