Как получить время выполнения программы на Python?

Порядок свойств в нормальных объектах является сложным объектом в Javascript.

Хотя в ES5 явно не указан порядок, ES2015 имеет порядок в определенных случаях. Это следующий объект:

o = Object.create(null, {
  m: {value: function() {}, enumerable: true},
  "2": {value: "2", enumerable: true},
  "b": {value: "b", enumerable: true},
  0: {value: 0, enumerable: true},
  [Symbol()]: {value: "sym", enumerable: true},
  "1": {value: "1", enumerable: true},
  "a": {value: "a", enumerable: true},
});

Это приводит к следующему порядку (в некоторых случаях):

Object {
  0: 0,
  1: "1",
  2: "2",
  b: "b",
  a: "a",
  Symbol(): "sym"
}
  1. целые ключи в порядке возрастания
  2. нормальные клавиши в порядке ввода
  3. Символы в порядке вставки

Таким образом, существует три сегмента, которые могут изменить порядок вставки (как это произошло в пример). И целые ключи не придерживаются порядка вставки.

Вопрос в том, какие методы этот порядок гарантирован в спецификации ES2015?

Следующие методы гарантируют показанный порядок:

  • Object.assign
  • Object.defineProperties
  • Object.getOwnPropertyNames
  • Object.getOwnPropertySymbols
  • ]
  • Reflect.ownKeys

Следующие методы / петли не гарантируют никакого порядка:

  • Object.keys
  • для ..in
  • JSON.parse
  • JSON.stringify

Вывод: даже в ES2015 вы не должны полагаться на порядок свойств нормального объектов в Javascript. Он подвержен ошибкам. Вместо этого используйте Map.

759
задан Peter Mortensen 15 July 2017 в 11:43
поделиться

6 ответов

Самый простой способ в Python :

import time
start_time = time.time()
main()
print("--- %s seconds ---" % (time.time() - start_time))

Предполагается, что выполнение вашей программы занимает не менее десятой доли секунды.

Выводит:

--- 0.764891862869 seconds ---
1445
ответ дан 22 November 2019 в 21:14
поделиться

Решение rogeriopvl работает нормально, но если вам нужна более конкретная информация, вы можете использовать встроенный профилировщик Python. Проверьте эту страницу:

http: // docs.

14
ответ дан 22 November 2019 в 21:14
поделиться

Еще лучше для Linux: / usr / bin / time

$ /usr/bin/time -v python rhtest2.py

    Command being timed: "python rhtest2.py"
    User time (seconds): 4.13
    System time (seconds): 0.07
    Percent of CPU this job got: 91%
    Elapsed (wall clock) time (h:mm:ss or m:ss): 0:04.58
    Average shared text size (kbytes): 0
    Average unshared data size (kbytes): 0
    Average stack size (kbytes): 0
    Average total size (kbytes): 0
    Maximum resident set size (kbytes): 0
    Average resident set size (kbytes): 0
    Major (requiring I/O) page faults: 15
    Minor (reclaiming a frame) page faults: 5095
    Voluntary context switches: 27
    Involuntary context switches: 279
    Swaps: 0
    File system inputs: 0
    File system outputs: 0
    Socket messages sent: 0
    Socket messages received: 0
    Signals delivered: 0
    Page size (bytes): 4096
    Exit status: 0

Обычно только time представляет собой более простую встроенную оболочку, которая затеняет более способную /usr/bin/time .

24
ответ дан 22 November 2019 в 21:14
поделиться
import time

start_time = time.clock()
main()
print time.clock() - start_time, "seconds"

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

60
ответ дан 22 November 2019 в 21:14
поделиться

Я поставил этот модуль Timing.py в мой собственный каталог site-packages и просто вставьте import Timing в верхнюю часть моего модуля:

import atexit
from time import clock

def secondsToStr(t):
    return "%d:%02d:%02d.%03d" % \
        reduce(lambda ll,b : divmod(ll[0],b) + ll[1:],
            [(t*1000,),1000,60,60])

line = "="*40
def log(s, elapsed=None):
    print line
    print secondsToStr(clock()), '-', s
    if elapsed:
        print "Elapsed time:", elapsed
    print line
    print

def endlog():
    end = clock()
    elapsed = end-start
    log("End Program", secondsToStr(elapsed))

def now():
    return secondsToStr(clock())

start = clock()
atexit.register(endlog)
log("Start Program")

Я также могу вызвать Timing.log изнутри мою программу, если в программе есть значимые этапы, которые я хочу показать. Но просто включение времени импорта напечатает время начала и окончания, а также общее прошедшее время. (Простите мою непонятную функцию secondsToStr , она просто форматирует число секунд с плавающей запятой в форме hh: mm: ss.sss.)

Примечание. Можно найти версию вышеуказанного кода для Python 3 здесь или здесь .

197
ответ дан 22 November 2019 в 21:14
поделиться

] В Linux или UNIX:

time python yourprogram.py

В Windows см. Это обсуждение Stackoverflow: Как измерить время выполнения команды в командной строке Windows?

152
ответ дан 22 November 2019 в 21:14
поделиться
Другие вопросы по тегам:

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