Python concurrent.futures 几乎没有变化的性能差异

Python concurrent.futures performance difference with little change

我得到了以下代码:

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 内存的第 3 代 i7(戴尔笔记本)上执行需要 1.6467 秒

如果更改此行

weight = mass * gravity

return mass * gravity

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

有人知道为什么会这样吗?

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

用行:

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 次后返回质量 * 重力的值。