Разница в производительности Python concurrent.futures с небольшими изменениями - PullRequest
0 голосов
/ 14 мая 2018

я получил следующий код:

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())

на ядре i7 3-го поколения с оперативной памятью 8 ГБ требуется 1,6647 секунды * (ноутбук dell)

если изменить эту строку

weight = mass * gravity

до

return mass * gravity

неожиданно для завершения требуется 0,059083 секунды.

Кто-нибудь знает, почему это происходит?

править: Наверное, я устаю. я не заметил, что цикл заканчивался. мои плохие парни

1 Ответ

0 голосов
/ 14 мая 2018

со строкой:

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

Итерация цикла for 10000 раз. Что займет время.

Однако, когда вы меняете его на:

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

Вместо этого он возвращает значение массы * гравитации только после 1 итерации цикла for.

...