Время нескольких скриптов python3

В будущем я напишу несколько небольших скриптов на Python 3, которые хочу рассчитать по времени. Одним из способов было бы написать каждый скрипт следующим образом:

# functions definitions go here

if __name__ == '__main__':
  import time
  start = time.time()

  # my code

  end = time.time()
  print("This script took {} seconds to execute".format(end - start))

Но мне пришлось бы прописывать это в каждом из этих скриптов. Как лучше всего рассчитать время моего сценария, не включая этот код каждый раз (без потери точности — я знаю о time ./script.py)?


person s1624210    schedule 18.12.2017    source источник
comment
как насчет времени?   -  person SuperStew    schedule 18.12.2017
comment
@SuperStew Должен ли я включать timeit в каждый файл?   -  person s1624210    schedule 18.12.2017
comment
Я так не думаю, но я думаю, это будет зависеть от вашей точной настройки. Прочитайте документы и посмотрите, сработает ли это для вас   -  person SuperStew    schedule 18.12.2017


Ответы (2)


Используйте модуль timeit vs time. Это лучше всего подходит для сравнения одного способа сделать что-то с другим способом сделать то же самое.

Вот действительно простой шаблон:

# if f1,f2,f3 are in another module or script, just import...
def f1(s):
    # that function returns something...

def f2(s):
    # etc

def f3(s):
    # etc 

if __name__=='__main__':
    import timeit    
    for case, x in (('small',1000),('med',10000),('large',1000000)):  
        data=[some data scaled by x]
        print("Case {}, {:,} x, All equal: {}".format(case,x,(f1(data)==f2(data)==f3(data))))
        for f in (f1,f2,f3):
            print("   {:^10s}{:.4f} secs".format(f.__name__, timeit.timeit("f(data)", setup="from __main__ import f, data", number=10)))

Это должно заставить вас начать. Чтобы получить более конкретный ответ, укажите более конкретную проблему, с которой вы столкнулись.

Один из моих других ответов содержит более сложный timeit пример.

Вы также можете просмотреть cProfile, чтобы профилировать полный скрипт и определить узкие места. Затем используйте timeit, чтобы попробовать варианты этой узкой функции.

person dawg    schedule 18.12.2017
comment
Благодарю вас! Я попробую немного и, возможно, задам несколько вопросов позже, ха-ха - person s1624210; 18.12.2017

Если вы находитесь в Unix-подобной среде, вы можете использовать оболочку.

Если вы находитесь в той же папке, что и скрипт:

$ time python mymodule.py
real    0m0.307s
user    0m0.030s
sys     0m0.030s

Если у вас есть скрипт в установленном пакете (я рекомендую редактируемый режим) вы можете запустить из любого места, используя имя модуля

$ time python -m mypackage.mymodule
real    0m0.407s
user    0m0.033s
sys     0m0.032s
person Zak    schedule 18.12.2017
comment
Я знаю о времени, но я думаю, что это не точно (будет печатать 30 мс в пустом файле python). - person s1624210; 18.12.2017
comment
Сюда входит время запуска интерпретатора Python. - person Zak; 18.12.2017