Подтвердить что ты не робот

Python: как получить количество секунд мили за один раз

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

4b9b3361

Ответ 1

Существует USER_HZ

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

что ядро ​​использует для сообщения времени в /proc.

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

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

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

Значение HZ зависит от версий ядра и аппаратных платформ. На i386 ситуация складывается так: на ядрах вплоть до 2.4.x, HZ составляло 100, давая значение в 0,01 секунды; начиная с 2.6.0, HZ был увеличен до 1000, что дало бы 0,011 секунды. поскольку ядро 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 в VM...

Ответ 2

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

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

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

Ответ 3

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

https://github.com/peppelinux/xt_recent_parser

вывод выглядит следующим образом:

python3 xt_recent_parser.py 
XT_RECENT python parser
<[email protected]>


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