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】基本逻辑门代码(二)
