Python time.clock () - сбросить значение часов с потоками - PullRequest
2 голосов
/ 19 апреля 2010

Я вижу, что time.clock () в Windows «запускает» таймер при первом вызове и возвращает время после первого вызова для вызовов. Я прочитал, что единственный способ перезапустить часы - это запустить новый процесс.

Предполагается, что запуск и уничтожение потоков также перезапустит time.clock ()? Кажется, сейчас это не работает. Если нет, то является ли единственным решением перезапустить весь исполняемый файл?

Ответы [ 2 ]

4 голосов
/ 19 апреля 2010

Поток не процесс, поэтому нет. (Как второстепенный момент, вы не можете уничтожить поток в Python, вы можете только попросить его выйти. Уничтожение потоков с помощью других средств, даже если такие средства существуют, может привести Python в плохое состояние.)

Вопрос , почему вы хотите сбросить таймер, а также почему вы используете time.clock(). Если вас волнует истекшее время между двумя точками с такой высокой степенью детализации, что time.time() не подходит, вам просто нужно вычесть первую точку из второй точки. Сброс не требуется. Я бы порекомендовал просто использовать time.time(), если вы действительно не заботитесь об этой крошечной разнице в детализации, поскольку time.time() работает одинаково на всех платформах, в отличие от time.clock().

0 голосов
/ 20 апреля 2013

Если оставить нитки отдельно, если вам нужны часы, вы можете сбросить их с точностью до time.clock(), которая выше, чем у time.time(), только потому, что число поплавков второго больше (почти незаметное различие), для измерения По прошествии некоторого времени при запуске некоторого кода вы можете попробовать это:

t0 = time.clock()
... do something
print('Running time:', time.clock()-t0)

Йо также может попробовать оформление функции для этого:

def duration(code):
    def f(*args):
        t0 = time.clock()
        bar = code(*args)
        print('Running time:', time.clock()-t0)
        return bar
    return f

После этого вы можете определить свою функцию с помощью декоратора:

@duration
def myFun(*args):
    ... do something

Или просто вызвать функцию с декоратором:

duration(myFun)(*args)
...