Рубрики
Без рубрики

Python Получить миллисекунды

В этой статье мы будем смотреть на то, как мы можем видеть время в миллисекундах, то есть одна тысячная (1000-го) секунды, используя Python. Это может быть для чистого любопытства, бенчмаркинга или получить очень, очень точное время суток – независимо от причины, акцентом статьи – как … Python Получить миллисекунды Подробнее »

Автор оригинала: Rikesh Nichani.

В этой статье мы будем смотреть на то, как мы можем видеть время в миллисекундах, то есть одна тысячная (1000-го) секунды, используя Python. Это может быть для чистого любопытства, сравнительного кода или получить очень, очень точное время суток – независимо от того, какая-то причина, в центре внимания статьи является то, как получить время в миллисекундах, а не то, что он должен использоваться в течение одного из них. Это.

Метод 1: миллисекунды и фиксированное время

Первый метод, который мы собираемся посмотреть, основано на измерении того, сколько времени прошло с фиксированной точки во времени, которое мы называем «эпохом». Для Python и вычисления в целом эпоха – это точка, когда начинается время, и поэтому измеряется течение времени. Хотя эпоха может варьироваться в зависимости от операционной системы, для Unix и Windows это полночь 1 января 1970 года в UTC Time (Greenwich означает время без ночного момента сбережений). Если вы хотите узнать, что время эпохи на данной платформе, которую вы можете использовать:

import time
time.gmtime(0)
# time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)

Поскольку я использую машину Windows 10, вышеуказанный вывод просто подтверждает, что время начала или эпоха для Python на моей машине 1 января 1970 года, 00:00:00.

Использование времени. Время ()

Стандартная библиотека времени Python может быть использована для возврата времени в считанные секунды с момента эпохи в качестве номера с плавающей запятой:

import time
time.time()
# 1613649533.180575

Это, по существу, дает нам количество секунд, которые прошли с момента эпохи, поэтому чтобы получить время в миллисекундах, мы должны умножить значение, возвращенное 1000. Для эстетики мы можем округлить номер и преобразовать в целое число:

import time
int(round(time.time()*1000))
# 1613649588303

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

time.time_ns ()

Оценивая эту потребность в более точности, версии Python 3.7 и позже включают в себя дополнительную функцию времени, которые измеряют время на наносекунду – тысячу -миллион секунды. Вы можете, как я, просто нужен момент, чтобы подумать об этом – тысячу миллионов секунды …

Итак, этот метод явно имеет точность, которую мы ищем, чтобы получить время в миллисекундах, нам все еще нужно разделить номер, возвращенный на 1 000 000 (то есть конвертирование наносекунды в миллисекунды):

import time
time.time_ns() // 1000000
# 1613649695449

Как функция автоматически возвращает целое число, нам не нужно беспокоиться о округлении или конвертации.

Способ 2: Миллисекунды и относительное время

Если наша цель состоит в том, чтобы измерить скорость в миллисекундах, например, для сравнительного кода, Python имеет несколько функций в момент времени, которая может специально помочь с этим. Мы будем смотреть на два, в частности, что можно использовать для измерения времени в наносекундах, поэтому дайте нам точность, которую мы требуем.

В отличие от примеров в методе 1, ни одна из этих функций не имеет определенного отношения к реальному миру – эпоху, они смотрят на то, что мы называем относительным временем. Значение, которое они возвращают, не определен против любой отправной точки, но может использоваться для измерения интервалов времени – например, сколько времени требуется для запуска задачи или определенного куска кода. Отказ

Time.Monotonic NS ()

Эта функция используется для получения значения монотонных часов, часов, которые не могут заходить назад и не зависят от обновлений системных часов. Поскольку возвращаемое значение не определено, то есть мы не знаем, какую отправную точку он относится к этому, он имеет ограниченное использование на своем собственном. Однако мы можем сэндвич-код между последовательными вызовами для измерения времени между вызовами и, следовательно, как долго требуется выполнить наш код.

В приведенном ниже примере мы распечатаем начальное монотонное время и финишное монотонное время для иллюстрации, так как они не имеют ценности самостоятельно. Однако мы можем использовать их для измерения времени между двумя вызовами, чтобы увидеть, сколько времени потребовалось для Python для выполнения функции печати. Поскольку возвращаемое значение находится в наносекундах, мы должны разделить на 1 000 000, чтобы получить наше время отклика Millisecond

import time
start = time.monotonic_ns()
print(start)
x=1
while(x<=100):
    print(x)
    x +=1
finish=time.monotonic_ns()    
duration = finish -  start
print(f"That took {duration//1000000}ms")

Вывод:

176278031000000
1
2
3
..
98
99
100
176278046000000
That took 15ms

time.perf_counter_ns ()

Этот метод похож на время. Моротование Функция ранее изложена, но, как следует из названия, является счетчиком производительности. Он не включает время, прошедшее во время сна и является системным. Это возвращает абсолютное значение счетчика, но, поскольку этот возврат не определен, так как с временем. Морото-функция, она имеет ограниченное использование на своем собственном.

Итак, как и в случае времени. Моротоническая функция, мы можем использовать последовательные вызовы для измерения времени между вызовами, и, поскольку возврат находится в наносекундах, мы должны разделить на 1 000 000 для получения миллисекунды:

import time
start = time.perf_counter_ns()
print(start)
x=1
while(x<=100):
    print(x)
    x +=1
finish = time.perf_counter_ns()
print(finish)   
duration = finish -  start
print(f"That took {duration//1000000}ms")

Вывод:

80058697360400
1
2
3
..
98
99
100
80058701461500
That took 4ms

С обоими time.perf_counter и время. Моротование Функции, время начала и окончания мы напечатали, не относятся к себе, потому что мы не знаем, что они относятся к. Их единственное использование – это показать нам время, прошедшее между звонками.

Метод 3: Миллисекунды и время суток

Наконец, мы собираемся посмотреть, как мы можем получить Python, чтобы рассказать нам время дня в миллисекундах, и делать это, мы будем использовать стандартную библиотеку Python datetime Отказ

datetime.dateTime.now ()

Эта функция возвращает текущую системную дату и время со следующими атрибутами:

Год , месяц , день , час , минута С Второй , микросхема

Если мы просто назовем функцию само по себе, она покажет нам текущую дату и время в моем месте, до микросекунда (одна миллионов секунды):

import datetime
datetime.datetime.now()
# datetime.datetime(2021,2,18,12,21,7,163392)

Вышеуказанный выход говорит мне текущий Местный время – это

  • Год: 2021.
  • Месяц: 2 (февраль)
  • День: 18.
  • Час: 12.
  • Минут: 21.
  • Секунд: 7.
  • Microconds: 163392.

Дело в том, что Мисосекан Возвращенные возвращенные атрибуты всегда относится к атрибуту секунд.

Теперь, если мы хотим преобразовать микросекунды в миллисекунды, мы должны разделить на 1000, мы также можем использовать оператор печати, чтобы помочь отформатировать функцию для чтения:

import datetime
dt = datetime.datetime.now()
print(dt)
dt.microsecond / 1000

Вывод:

2021-02-18 12:21:59.889660
889.66

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

datetime.dateTime.utcnow ()

Небольшое изменение в предыдущем примере используется Utcnow () вместо того, чтобы просто сейчас () Отказ UTC относится к времени в скоординированном универсальном времени или среднем времени Гринвича (GMT) и полезен для расчета абсолютных различий в сроках времени без путаницы временных зон. Как я живу в Лондоне, нет разницы в моем коде между сейчас () и Utcnow () Но мы все равно увидим это в действии.

Если мы позвоним в функции без какого-либо форматирования, мы получаем аналогичный вывод к тому, что мы видели раньше, поэтому атрибуты одинаковы:

import datetime
datetime.datetime.utcnow()
# datetime.datetime(2021, 2, 18, 12, 22, 45, 343352)

Мы могли бы получить наши миллисекунды, поскольку мы сделали с сейчас () Функция, и она будет работать так же, но давайте посмотрим на другой метод. В этом примере мы собираемся использовать strftime () Способ преобразования нашего datetime объект в строку:

import datetime
datetime.datetime.utcnow().strftime('%Y-%m-%d-%H:%M:%S:%f')
# '2021-02-18-12:23:34:474314'

Поскольку последнее число представляет микросекунды, если мы хотим отобразить текущее время в миллисекундах, мы можем игнорировать последние 3 цифры, нарезка. Это имеет тот же эффект, что и разделив на 1000, тем самым преобразование или время в микросекунды:

import datetime
print(datetime.datetime.utcnow().strftime('%Y-%m-%d-%H:%M:%S:%f')[:-3])
# 2021-02-18-12:24:28:401

Резюме

Мы смотрели на несколько способов использования Python, чтобы показать нам время в миллисекундах. В то время как обновление от простого время. время к time.time_ns. Определенно помогает с нашей точностью, трудно предоставить рекомендации по лучшей практике. Все методы, которые мы видели, предоставляют ответ, но это правильный ответ действительно зависит от вопроса, который мы просим.

Ключ находит правильный метод соответствия вашим конкретным требованиям, факторы, такие как уровень точностью, географические местоположения и уровень сложности будут определять правильный подход. К счастью, Python имеет ряд способов помочь нам получить миллисекунды, поэтому он может прийти к личным предпочтениям.

Оригинал: “https://blog.finxter.com/python-get-milliseconds/”