Задать вопрос
@zlodiak

Почему время выполнения скрипта отрицательное?

Следующий код выполняет каждую операцию в отдельном процессе:

from multiprocessing import Pool
import timeit
 
def doubler(number):
    return number * 2
 
if __name__ == '__main__':
    start = timeit.timeit()

    numbers = [1,2,3,4,5,6,7,8,9]
    pool = Pool(processes=9)
    print(pool.map(doubler, numbers))

    end = timeit.timeit()
    print(end - start)


Как видите, в коне работы скрипта я выводу время, за которое он выполнился.

Я понимаю, что оно будет каждый раз отличаться. но мне не понятно почему иногда оно является отрицательной величиной. Объясните пожалуйста

kalinin@md ~/python/project1 $ python3 index.py
[2, 4, 6, 8, 10, 12, 14, 16, 18]
-0.00011791801080107689
kalinin@md ~/python/project1 $ python3 index.py
[2, 4, 6, 8, 10, 12, 14, 16, 18]
3.108987584710121e-05
kalinin@md ~/python/project1 $ python3 index.py
[2, 4, 6, 8, 10, 12, 14, 16, 18]
-4.2076921090483665e-05
kalinin@md ~/python/project1 $ python3 index.py
[2, 4, 6, 8, 10, 12, 14, 16, 18]
4.149484448134899e-05
kalinin@md ~/python/project1 $ python3 index.py
[2, 4, 6, 8, 10, 12, 14, 16, 18]
-0.00013088202103972435
kalinin@md ~/python/project1 $ python3 index.py
[2, 4, 6, 8, 10, 12, 14, 16, 18]
0.00017258897423744202
  • Вопрос задан
  • 178 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
timeit.timeit() вам выдает совсем не то, что Вы думате! В каждом из случаев выдается время простой инструкции pass
Вам нужно вместо timeit.timeit() использувать time.time()!
from multiprocessing import Pool
import time
 
def doubler(number):
    return number * 2
 
if __name__ == '__main__':
    start = time.time()

    numbers = [1,2,3,4,5,6,7,8,9]
    pool = Pool(processes=9)
    print(pool.map(doubler, numbers))

    end = time.time()
    print(end - start)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Fixid
Вы не правильно понимаете как работает timeit.timeit.
Для измерения времени работы кода надо передать его внутрь timeit.timeit.
Просто внимательно прочитайте.

Альтернатива:
import time
start_time = time.time()
--- измеряемый код  ----
print("--- %s seconds ---" % (time.time() - start_time))
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы