python: multiprocessing多进程并行计算
简介
多进程 vs 多线程 CPU密集型用多进程;IO密集型用多线程。
实例1
在科学计算中使用multiprocessing进行多进程并行计算。
-
前提:多个方法func1,func2,…,funcN是相互独立的,可以并行计算。 当每个func的运行时间都较长时,利用多进程并行计算才会极大提高运行效率。原因:使用多进程本身会有一定的时间开销。
实例代码 注意:通过sleep(t)来模拟控制func运行消耗的时间
def func1(x): print(f当前进程:{os.getpid()},计算func1中......) time.sleep(5) return x**2 def func2(x): print(f当前进程:{os.getpid()},计算func2中......) time.sleep(5) return x**3 def test1(): """单进程计算 """ print(方法1:单进程计算) print(f当前主进程:{os.getpid()}) start = time.time() a = func1(2) b = func2(2) c = a + b end = time.time() t = end - start print(c=, c) print(f计算完成,共用时:{t:.2f}s) def test2(): """利用multiprocessing实现多进程计算 """ print(方法2:多进程计算) print(f当前主进程:{os.getpid()}) start = time.time() pool = Pool() result1 = pool.apply_async(func1, args=(2, )) result2 = pool.apply_async(func2, args=(2, )) pool.close() pool.join() a = result1.get() b = result2.get() c = a + b end = time.time() t = end - start print(c=, c) print(f计算完成,共用时:{t:.2f}s) if __name__ == "__main__": test1() test2()
结果及分析
-
方法1计算过程中始终在同一个进程;方法2开始的进程与方法1相同,因为都是从main()入口进去的。然后计算func1和func2时,就分别开了两个新进程。符合预期。 多进程计算确实提高了运行效率,时间缩短了近3s; 理论上func1和func2并行计算,需要5s。实际有7s多,说明使用多进程是有一定固定开销的。因此,单个func运行时间越多,多进程计算节省时间也越多。调节sleep时间,可证实这一结论。
方法1:单进程计算 当前主进程:15316 当前进程:15316,计算func1中...... 当前进程:15316,计算func2中...... c= 12 计算完成,共用时:10.00s 方法2:多进程计算 当前主进程:15316 当前进程:14996,计算func1中...... 当前进程:16708,计算func2中...... c= 12 计算完成,共用时:7.17s
下一篇:
【Verilog】基本逻辑门代码(二)