【发布时间】:2020-01-05 23:16:49
【问题描述】:
我正在尝试比较 Python 中的顺序计算和并行计算。
这是基准功能。
def benchmking_f(n=0):
import time
items = range(int(10**(6+n)))
def f2(x):return x*x
start = time.time()
sum_squared = 0
for i in items:
sum_squared += f2(i)
return time.time() - start
这个顺序计算
problem_size = 2
import time
start = time.time()
tlist = []
for i in range(5):
tlist.append(benchmking_f(problem_size))
print('for loop took {}s'.format(time.time() - start))
print('each iterate took')
print(tlist)
完成这项工作大约需要 70 年代;每次迭代 [14.209498167037964、13.92169737815857、13.949078798294067、13.94432258605957、14.004642486572266]
这种并行方法
problem_size = 2
import itertools
import multiprocessing
start = time.time()
pool = multiprocessing.Pool(5)
tlist = list(pool.map(benchmking_f, itertools.repeat(problem_size, 5)))
print('pool.map took {}s'.format(time.time() - start))
print('each iterate took')
print(tlist)
耗时约 42.45 秒;每次迭代 [41.17476940155029、41.92032074928284、41.50966739654541、41.348535776138306、41.06284761428833]
问题
整个计算的一部分(本例中为 benchmking_f)顺序耗时约 14 秒,并行耗时 42.45 秒
这是为什么呢?
注意: 我不是在问总时间。我问的是整个计算的时间,它在 for 循环中进行一次迭代,并且并行处理一个进程/线程。
1-iter benchmking_f 接受。
【问题讨论】:
-
但这并没有花更长的时间。 70 > 42.45。
-
@kindall 感谢您的提醒。我已经更新了。我不是在问总时间。我问的是整个计算的时间,它在 for 循环中进行一次迭代,并在一个进程/线程并行。
标签: python parallel-processing multiprocessing