Проблема с Timeit - Время обработки - Странное число - PullRequest
0 голосов
/ 08 апреля 2019

В основном у меня есть файл с кодом для расчета времени какого-либо процесса. Но это не работает правильно. Просто работай, если я помещу содержимое функций в свой main.

Неправильный расчет из файла util.py

import timeit

start_process = 0
finish_process = 0

def starting_process():
    start_process = timeit.default_timer()

def time_process():
    finish_process = timeit.default_timer()
    time_total = finish_process - start_process

    # output running time in a nice format.
    mins, secs = divmod(time_total, 60)
    hours, mins = divmod(mins, 60)

    return "Total running time: %d:%d:%d" % (hours, mins, secs)

В процессе, который тратит 4 секунды, он показывает мне так: 238: 23: 55

Если я добавлю этот код в свой основной без функций, он будет показан правильно: 0: 0: 4

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

Спасибо

Лукас Антони.

1 Ответ

0 голосов
/ 08 апреля 2019

Эта функция:

def starting_process():
    start_process = timeit.default_timer()

создает локальную переменную start_process, устанавливает значение, а затем возвращает None (поскольку явного оператора возврата нет).Значение теряется при завершении функции.Функция не влияет на глобальную переменную start_process.

Поэтому, когда вызывается time_process(), выражение, использующее start_process, видит, что в time_process нет локальной переменной с таким именем, но вместо этогонаходит глобальную переменную, которая установлена ​​в 0.

Один из способов исправить это - использовать

def starting_process():
    global start_process
    start_process = timeit.default_timer()

, чтобы сообщить starting_process, что переменная start_process является глобальной переменной.

...