Python: как получить количество миллисекунд за один миг - PullRequest
13 голосов
/ 16 ноября 2010

Я хотел бы знать HZ системы, то есть, сколько миллисекунд - это один миг из кода Python.

Ответы [ 3 ]

23 голосов
/ 16 ноября 2010

USER_HZ

>>> import os
>>> os.sysconf_names['SC_CLK_TCK']
2
>>> os.sysconf(2)
100

- это то, что ядро ​​использует, чтобы сообщать время в /proc.

На странице руководства time(7):

Программные часы, HZ и Jiffies

Точность различных системных вызовов, которые устанавливают тайм-ауты (например, select (2), sigtimedwait (2)) и измеряют время ЦП (например, getrusage (2)) ограничен разрешением программных часов, часов, поддерживаемых ядром, которое измеряет время в jiffies.Размер jiffy определяется значением константы ядра HZ.

Значение HZ варьируется в зависимости от версии ядра и аппаратных платформ.На i386 ситуация выглядит следующим образом: на ядрах вплоть до 2.4.x включительно HZ равнялся 100, давая значение jiffy 0,01 секунды;начиная с 2.6.0, HZ был повышен до 1000, что дает мгновенный результат в 0,001 секунды.Начиная с ядра 2.6.13, значение HZ является параметром конфигурации ядра и может быть 100, 250 (по умолчанию) или 1000, что дает значение jiffies, соответственно, 0,01, 0,004 или 0,001 секунды.Начиная с ядра 2.6.20, доступна еще одна частота: 300, число, которое делится поровну для общей частоты видеокадров (PAL, 25 Гц; NTSC, 30 Гц).

Время (2)Системный вызов - это особый случай.Он сообщает время с гранулярностью, определенной константой ядра USER_HZ.Приложения в пользовательском пространстве могут определить значение этой константы с помощью sysconf (_SC_CLK_TCK).

Если вам абсолютно необходимо знать SYSTEM_HZ:

>>> from ctypes import *
>>> rt = CDLL('librt.so')
>>> CLOCK_REALTIME = 0
>>> class timespec(Structure):
...     _fields_ = [("tv_sec", c_long), ("tv_nsec", c_long)]
... 
>>> res = timespec()
>>> rt.clock_getres(CLOCK_REALTIME, byref(res))
0
>>> res.tv_sec, res.tv_nsec
(0, 4000250)
>>> SYSTEM_HZ = round(1/(res.tv_sec + (res.tv_nsec/10.0**9)))

Дает 250 на моем ноутбуке (что звучито праве) и 1000000000 в ВМ…

5 голосов
/ 16 ноября 2010

sysconf (SC_CLK_TCK) не дает частоту прерываний по таймеру в Linux. Он дает частоту jiffies, которая видна пользователям в таких вещах, как счетчики в различных каталогах в / proc

Фактическая частота скрыта от пользователя, намеренно. Действительно, некоторые системы используют динамические тики или «тиковые» системы, поэтому на самом деле их вообще нет.

Все интерфейсы пользовательского пространства используют значение из SC_CLK_TCK, которое, насколько я вижу, в Linux всегда равно 100.

0 голосов
/ 25 марта 2017

Я написал это:

https://github.com/peppelinux/xt_recent_parser

вывод выглядит так:

python3 xt_recent_parser.py 
XT_RECENT python parser
<giuseppe.demarco@unical.it>


114.241.108.160, last seen: 2017-03-25 18:21:42 after 13 Connections 
46.165.210.17, last seen: 2017-03-25 13:07:54 after 10 Connections 
61.53.219.162, last seen: 2017-03-25 17:39:17 after 20 Connections 
179.37.141.232, last seen: 2017-03-25 18:08:23 after 2 Connections 
114.42.117.39, last seen: 2017-03-25 13:22:14 after 18 Connections 
177.12.84.234, last seen: 2017-03-25 16:22:14 after 17 Connections 

Я думаю, что будет легко отредактировать, если вам нужно преобразование в миллисекунды, вам нужно только расширить класс Python JiffyTimeConverter

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...