Python concurrent.futures性能差异变化不大

时间:2018-05-14 02:35:55

标签: python multithreading concurrent.futures

我收到了以下代码:

from concurrent.futures import ThreadPoolExecutor, wait
import datetime

def calculate_mass(mass):
    for _ in range(10000):
        gravity = 9.8
        weight = mass * gravity


def perform_calculations():
    with ThreadPoolExecutor(3) as pool:
        pool.map(calculate_mass, range(1000))

if __name__ == '__main__':
    start = datetime.datetime.now()
    perform_calculations()
    end = datetime.datetime.now()

    print((end - start).total_seconds())

使用8gb ram(dell notebook)在核心i7第3代上执行需要1.6467秒

如果更改此行

weight = mass * gravity

return mass * gravity

突然间需要0.059083秒才能完成。

有谁知道为什么会这样?

编辑:我想我累了。我没注意到循环结束了。我的坏人

1 个答案:

答案 0 :(得分:1)

使用以下行:

for _ in range(10000):
    gravity = 9.8
    weight = mass * gravity

它遍历for循环10,000次。这需要时间。

但是,当您将其更改为:

for _ in range(10000):
    gravity = 9.8
    return mass * gravity

相反,它仅通过for循环返回1次迭代后的质量*重力值。