Несоответствие между модулями времени и даты и времени для измерения времени выполнения кода - PullRequest
0 голосов
/ 01 февраля 2019

Я измеряю время отклика для функции, используя модуль времени.Предполагается, что модуль времени выводит секунды в виде числа с плавающей запятой, поэтому я сохраняю начальное значение времени (time.clock ()) и в конце выполняю другое чтение и использую разницу в качестве времени выполнения.Наблюдая за результатами, мы отметили, что время выполнения выглядело высоким - что-то, что, казалось, занимало менее 2 секунд, например, печаталось как 3-сменное.Исходя из обнаруженной проблемы, я решил перепроверить результаты, используя модуль datetime.Печать двух бок о бок показывает, что значения модуля времени почти вдвое превышают значения даты и времени.

Кто-нибудь знает, почему это может быть?

Вот мой код:

for datum in data:
    start = datetime.datetime.now()
    startts = time.clock()
    check = test_func(datum)
    runtime = datetime.datetime.now() - start
    runts = time.clock() - startts
    print(check, "Time required:", runtime, "or", runts)

Некоторые из моих результатов:

XYZ Time required: 0:00:01.985303 or 3.7836029999999994
XYZ Time required: 0:00:01.476289 or 3.3465039999999817
XYZ Time required: 0:00:01.454407 or 3.7140109999999993
XYZ Time required: 0:00:01.550416 or 3.860824000000008

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

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Мы нашли проблему.Test_func, который я тестирую, использует многопоточный процесс.Я оба не знал этого и не знал, что это проблема.

В модуле времени используется время процессора (https://docs.python.org/3.6/library/time.html),, в то время как в модуле даты-времени используется время настенных часов (https://docs.python.org/3.6/library/datetime.html).. Использование разницы в метках времени и даты покажет мне, сколько фактического времени прошло,и для наших целей была необходима соответствующая информация.

Надеюсь, это поможет кому-то еще в будущем!

0 голосов
/ 01 февраля 2019

Похоже, time.clock () устарела с версии 3.3

Может быть , это поможет?

time.clock () В Unix,возвращает текущее время процессора в виде числа с плавающей запятой, выраженного в секундах.Точность и, собственно, само определение значения «процессорного времени» зависит от того же значения функции Си с тем же именем.

В Windows эта функция возвращает часы настенных часов, прошедшие с момента первоговызов этой функции в виде числа с плавающей запятой, основанного на функции Win32 QueryPerformanceCounter ().Разрешение обычно лучше, чем одна микросекунда.

Устаревшее с версии 3.3: Поведение этой функции зависит от платформы: вместо этого используйте perf_counter () или process_time (), в зависимости от ваших требований, чтобы иметь четкое определениеповедение.

...