Что лучше использовать для синхронизации в Python? time.clock () или time.time ()? Какой из них обеспечивает большую точность?
например:
start = time.clock()
... do something
elapsed = (time.clock() - start)
против
start = time.time()
... do something
elapsed = (time.time() - start)
time.clock()
устарело , и рекомендуется использоватьperf_counter()
илиprocess_time()
вместо.timeit.default_timer()
для измерения производительности (он назначается time.time () или time.clock () в зависимости от ОС) .time.clock
иtime.process_time
, но дочерние процессы не являются. Также посмотрите это обсуждение точности (конечно, зависит от системы).Ответы:
Начиная с 3.3, time.clock () устарела , и вместо него предлагается использовать time.process_time () или time.perf_counter () .
Ранее в 2.7, в соответствии с документами модуля времени :
Кроме того, есть модуль timeit для сравнительного анализа фрагментов кода.
источник
time.clock()
было зависимым от платформы, иtime.process_time()
это не так. Это причина, почемуtime.clock()
был объявлен устаревшим.Короткий ответ: в большинстве случаев
time.clock()
будет лучше. Однако, если вы синхронизируете какое-то оборудование (например, какой-то алгоритм, который вы вставляете в GPU), тоtime.clock()
избавитесь от этого времени и останетесьtime.time()
единственным решением.Примечание: какой бы метод ни использовался, время будет зависеть от факторов, которые вы не можете контролировать (когда произойдет переключение процесса, как часто, ...), с этим хуже,
time.time()
но есть и сtime.clock()
таким, поэтому вы никогда не должны запускать только один тест синхронизации, но всегда запускайте серию тестов и смотрите на среднее / дисперсию времени.источник
Другие ответили:
time.time()
противtime.clock()
.Однако, если вы планируете выполнение блока кода для целей тестирования / профилирования, вы должны взглянуть на
timeit
модуль .источник
timeit.default_timer
назначаетсяtime.time()
илиtime.clock()
зависит от ОС. На Python 3.3+default_timer
естьtime.perf_counter()
на всех платформах.Следует помнить одну вещь: изменение системного времени влияет,
time.time()
но не влияетtime.clock()
.Мне нужно было контролировать выполнение некоторых автоматических тестов. Если один шаг тестового примера занимал больше заданного времени, этот TC был прерван, чтобы перейти к следующему.
Но иногда необходимо было изменить шаг системного времени (чтобы проверить модуль планировщика тестируемого приложения), поэтому после установки системного времени через несколько часов время тайм-аута TC истекло, и контрольный пример был прерван. Я должен был перейти от
time.time()
к ,time.clock()
чтобы справиться с этим правильно.источник
clock()
-> число с плавающей точкойВозврат времени ЦП или реального времени с момента начала процесса или с момента первого вызова
clock()
. Это имеет такую же точность, как и системные записи.time()
-> число с плавающей точкойВернуть текущее время в секундах с начала эпохи. Могут присутствовать доли секунды, если их обеспечивают системные часы.
Обычно
time()
это более точно, потому что операционные системы не хранят время выполнения процесса с точностью, которую они сохраняют системное время (то есть фактическое время)источник
Зависит от того, что вы заботитесь. Если вы имеете в виду WALL TIME (как, например, время на часах на вашей стене), time.clock () НЕТ точности, поскольку она может управлять временем процессора.
источник
time.clock()
на серверах Linux, и числа, которые я получил, точно не были секундамиtime()
имеет лучшую точность, чемclock()
в Linux.clock()
имеет точность менее 10 мс. Покаtime()
дает префект точность. Мой тест на CentOS 6.4 , python 2.6using clock():
источник
Разница очень зависит от платформы.
Например, clock () в Windows сильно отличается от Linux.
Для примеров, которые вы описываете, вы, вероятно, захотите использовать модуль "timeit".
источник
clock
заключается"very different"
?Как уже отмечено ,
time.clock()
является устаревшим в пользуtime.perf_counter()
илиtime.process_time()
, но Python 3.7 вводит наносекундным разрешением по времени сtime.perf_counter_ns()
,time.process_time_ns()
иtime.time_ns()
, вместе с 3 другими функциями.Эти 6 новых функций с разрешением наносекунды подробно описаны в PEP 564 :
Как уже отмечали другие, используйте
timeit
модуль для определения времени функций и небольших фрагментов кода.источник
В Unix time.clock () измеряет количество процессорного времени, которое использовалось текущим процессом, поэтому оно не годится для измерения прошедшего времени с некоторого момента в прошлом. В Windows он будет измерять количество секунд, прошедших с момента первого вызова функции. В любой системе time.time () будет возвращать секунды, прошедшие с начала эпохи.
Если вы пишете код, предназначенный только для Windows, любой из них будет работать (хотя вы будете использовать их по-разному - для time.clock ()) вычитание не требуется. Если это будет работать в системе Unix или вы хотите, чтобы код, который гарантированно был переносимым, вы захотите использовать time.time ().
источник
Краткий ответ: используйте time.clock () для синхронизации в Python.
В системах * nix clock () возвращает время процессора в виде числа с плавающей запятой, выраженного в секундах. В Windows он возвращает секунды, прошедшие с момента первого вызова этой функции, в виде числа с плавающей запятой.
time () возвращает секунды с начала эпохи в формате UTC как число с плавающей запятой. Нет гарантии, что вы получите лучшую точность, чем 1 секунда (хотя time () возвращает число с плавающей запятой). Также обратите внимание, что если системные часы были установлены обратно между двумя вызовами этой функции, второй вызов функции вернет меньшее значение.
источник
Насколько я понимаю, time.clock () имеет настолько высокую точность, насколько позволяет ваша система.
источник
Я использую этот код для сравнения 2 методов. Моя ОС Windows 8, процессорное ядро i5, RAM 4 ГБ
вывод:
время () = 0,0993799996376
часы () = 0.0993572257367
источник
Правильный ответ: они оба имеют одинаковую длину дроби.
Но что быстрее, если
subject
естьtime
?Маленький тестовый пример :
Я не работаю в швейцарских лабораториях, но я проверил ..
Исходя из этого вопроса:
time.clock()
лучше, чемtime.time()
Редактировать:
time.clock()
внутренний счетчик, поэтому не может использоваться снаружи, получил ограниченияmax 32BIT FLOAT
, не может продолжать считать, если не сохранить первые / последние значения. Не могу объединить еще один счетчик ...источник
time.clock()
был удален в Python 3.8, потому что он имел платформо-зависимое поведение :В Windows эта функция возвращает часы настенных часов, прошедшие с момента первого вызова этой функции, в виде числа с плавающей запятой
Так какую функцию выбрать вместо?
Время процессора . Это время, которое этот конкретный процесс активно проводит на процессоре. Спящий режим, ожидание веб-запроса или время, когда выполняются только другие процессы, не будут этому способствовать.
time.process_time()
Время настенных часов : это относится к тому, сколько времени прошло «на часах, висящих на стене», то есть вне реального времени.
использование
time.perf_counter()
time.time()
также измеряет время настенных часов, но может быть сброшено, чтобы вы могли вернуться назад во времениtime.monotonic()
не может быть сброшен (монотонный = только вперед), но имеет меньшую точность, чемtime.perf_counter()
источник
Сравнение результатов теста между Ubuntu Linux и Windows 7.
На Ubuntu
В Windows 7
источник