我目前正在重新设计一个程序来使用Python的多处理池。我的第一印象是执行时间增加而不是减少。因此,我得到了好奇,并写了一个小测试脚本:Python多处理池执行时间与非多处理执行时间相比
import time
import multiprocessing
def simple(x):
return 2*x
def less_simple(x):
b = x
for i in range(0, 100):
b = b * i
return 2*x
a = list(range(0,1000000))
print("without multiprocessing:")
before = time.time()
res = map(simple, a)
after = time.time()
print(str(after - before))
print("-----")
print("with multiprocessing:")
for i in range(1, 5):
before = time.time()
with multiprocessing.Pool(processes=i) as pool:
pool.map(simple, a)
after = time.time()
print(str(i) + " processes: " + str(after - before))
我得到如下结果:
无多处理: 2.384185791015625e-06
与多:
1处理:0.35068225860595703
2处理:0.21297240257263184
3工序:0.21887946128845215
4处理:0.3474385738372803
当我在线21和31 less_simple更换简单,我得到以下的结果:
无多处理: 2.6226043701171875e-06
with multiprocessing:
1进程:3.1453816890716553
个2工序:1.615351676940918
3工序:1.6125438213348389
4个过程:1.5159809589385986
老实说,我有点困惑,因为非多版本总是幅度的一些订单快。另外,进程号的增加似乎对运行时没有影响。因此,我有几个问题:
- 我是否在使用多处理时犯了一些错误?
- 我的测试功能是否简单以获得多处理的积极影响?
- 有没有机会估计多处理在哪一点上有优势,还是我必须测试它?
对于小的任务产生新进程将大于时间的成本花在做工作。而且首先也不需要它。 – jonatan
你的测试功能太简单了。产生过程和传递输入和结果相对于实际计算而言过于昂贵。 – timakro