Submit
Path:
~
/
/
lib
/
python3
/
dist-packages
/
File Content:
monotonic.py
# -*- coding: utf-8 -*- """ monotonic ~~~~~~~~~ This module provides a ``monotonic()`` function which returns the value (in fractional seconds) of a clock which never goes backwards. On Python 3.3 or newer, ``monotonic`` will be an alias of ``time.monotonic`` from the standard library. On older versions, it will fall back to an equivalent implementation: +-------------+----------------------------------------+ | Linux, BSD | ``clock_gettime(3)`` | +-------------+----------------------------------------+ | Windows | ``GetTickCount`` or ``GetTickCount64`` | +-------------+----------------------------------------+ | OS X | ``mach_absolute_time`` | +-------------+----------------------------------------+ If no suitable implementation exists for the current platform, attempting to import this module (or to import from it) will cause a ``RuntimeError`` exception to be raised. Copyright 2014, 2015, 2016 Ori Livneh <ori@wikimedia.org> Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. """ import time __all__ = ('monotonic',) try: monotonic = time.monotonic except AttributeError: import ctypes import ctypes.util import os import sys import threading try: if sys.platform == 'darwin': # OS X, iOS # See Technical Q&A QA1398 of the Mac Developer Library: # <https://developer.apple.com/library/mac/qa/qa1398/> libc = ctypes.CDLL('/usr/lib/libc.dylib', use_errno=True) class mach_timebase_info_data_t(ctypes.Structure): """System timebase info. Defined in <mach/mach_time.h>.""" _fields_ = (('numer', ctypes.c_uint32), ('denom', ctypes.c_uint32)) mach_absolute_time = libc.mach_absolute_time mach_absolute_time.restype = ctypes.c_uint64 timebase = mach_timebase_info_data_t() libc.mach_timebase_info(ctypes.byref(timebase)) nanoseconds_in_second = 1.0e9 def monotonic(): """Monotonic clock, cannot go backward.""" nanoseconds = mach_absolute_time() * timebase.numer / timebase.denom return nanoseconds / nanoseconds_in_second elif sys.platform.startswith('win32') or sys.platform.startswith('cygwin'): if sys.platform.startswith('cygwin'): # Note: cygwin implements clock_gettime (CLOCK_MONOTONIC = 4) since # version 1.7.6. Using raw WinAPI for maximum version compatibility. # Ugly hack using the wrong calling convention (in 32-bit mode) # because ctypes has no windll under cygwin (and it also seems that # the code letting you select stdcall in _ctypes doesn't exist under # the preprocessor definitions relevant to cygwin). # This is 'safe' because: # 1. The ABI of GetTickCount and GetTickCount64 is identical for # both calling conventions because they both have no parameters. # 2. libffi masks the problem because after making the call it doesn't # touch anything through esp and epilogue code restores a correct # esp from ebp afterwards. try: kernel32 = ctypes.cdll.kernel32 except OSError: # 'No such file or directory' kernel32 = ctypes.cdll.LoadLibrary('kernel32.dll') else: kernel32 = ctypes.windll.kernel32 GetTickCount64 = getattr(kernel32, 'GetTickCount64', None) if GetTickCount64: # Windows Vista / Windows Server 2008 or newer. GetTickCount64.restype = ctypes.c_ulonglong def monotonic(): """Monotonic clock, cannot go backward.""" return GetTickCount64() / 1000.0 else: # Before Windows Vista. GetTickCount = kernel32.GetTickCount GetTickCount.restype = ctypes.c_uint32 get_tick_count_lock = threading.Lock() get_tick_count_last_sample = 0 get_tick_count_wraparounds = 0 def monotonic(): """Monotonic clock, cannot go backward.""" global get_tick_count_last_sample global get_tick_count_wraparounds with get_tick_count_lock: current_sample = GetTickCount() if current_sample < get_tick_count_last_sample: get_tick_count_wraparounds += 1 get_tick_count_last_sample = current_sample final_milliseconds = get_tick_count_wraparounds << 32 final_milliseconds += get_tick_count_last_sample return final_milliseconds / 1000.0 else: try: clock_gettime = ctypes.CDLL(ctypes.util.find_library('c'), use_errno=True).clock_gettime except Exception: clock_gettime = ctypes.CDLL(ctypes.util.find_library('rt'), use_errno=True).clock_gettime class timespec(ctypes.Structure): """Time specification, as described in clock_gettime(3).""" _fields_ = (('tv_sec', ctypes.c_long), ('tv_nsec', ctypes.c_long)) if sys.platform.startswith('linux'): CLOCK_MONOTONIC = 1 elif sys.platform.startswith('freebsd'): CLOCK_MONOTONIC = 4 elif sys.platform.startswith('sunos5'): CLOCK_MONOTONIC = 4 elif 'bsd' in sys.platform: CLOCK_MONOTONIC = 3 elif sys.platform.startswith('aix'): CLOCK_MONOTONIC = ctypes.c_longlong(10) def monotonic(): """Monotonic clock, cannot go backward.""" ts = timespec() if clock_gettime(CLOCK_MONOTONIC, ctypes.pointer(ts)): errno = ctypes.get_errno() raise OSError(errno, os.strerror(errno)) return ts.tv_sec + ts.tv_nsec / 1.0e9 # Perform a sanity-check. if monotonic() - monotonic() > 0: raise ValueError('monotonic() is not monotonic!') except Exception as e: raise RuntimeError('no suitable implementation for this system: ' + repr(e))
Submit
FILE
FOLDER
Name
Size
Permission
Action
Babel-2.8.0.egg-info
---
0755
CommandNotFound
---
0755
DistUpgrade
---
0755
Django-3.2.12.egg-info
---
0755
Genshi-0.7.6.egg-info
---
0755
HweSupportStatus
---
0755
Jinja2-3.0.3.egg-info
---
0755
MarkupSafe-2.0.1.egg-info
---
0755
MySQLdb
---
0755
OpenSSL
---
0755
PyGObject-3.42.1.egg-info
---
0755
PyGreSQL-5.1.2.egg-info
---
0755
PyJWT-2.3.0.egg-info
---
0755
PyNaCl-1.5.0.dist-info
---
0755
PyYAML-5.4.1.egg-info
---
0755
Pygments-2.11.2.egg-info
---
0755
S3
---
0755
SecretStorage-3.3.1.egg-info
---
0755
Sphinx-4.3.2.egg-info
---
0755
Trac-1.5.3.egg-info
---
0755
UpdateManager
---
0755
__pycache__
---
0755
_distutils_hack
---
0755
_yaml
---
0755
alabaster
---
0755
alabaster-0.7.12.egg-info
---
0755
apport
---
0755
apt
---
0755
apt_inst-stubs
---
0755
apt_pkg-stubs
---
0755
aptsources
---
0755
asgiref
---
0755
asgiref-3.5.0.egg-info
---
0755
attr
---
0755
attrs-21.2.0.egg-info
---
0755
awscli
---
0755
awscli-1.22.34.egg-info
---
0755
babel
---
0755
blinker
---
0755
boto
---
0755
boto-2.49.0.egg-info
---
0755
botocore
---
0755
botocore-1.23.34.egg-info
---
0755
certifi
---
0755
certifi-2020.6.20.egg-info
---
0755
chardet
---
0755
chardet-4.0.0.egg-info
---
0755
colorama
---
0755
colorama-0.4.4.egg-info
---
0755
cryptography
---
0755
cryptography-3.4.8.egg-info
---
0755
curl
---
0755
dateutil
---
0755
dbus
---
0755
dbus_python-1.2.18.egg-info
---
0755
debian
---
0755
debian_bundle
---
0755
devscripts
---
0755
devscripts-2.22.1ubuntu1.egg-info
---
0755
distlib
---
0755
distlib-0.3.4.egg-info
---
0755
distro
---
0755
distro-1.7.0.egg-info
---
0755
distro_info-1.1+ubuntu0.2.egg-info
---
0755
django
---
0755
docutils
---
0755
docutils-0.17.1.egg-info
---
0755
duplicity
---
0755
duplicity-0.8.21.egg-info
---
0755
fail2ban
---
0755
fail2ban-0.11.2.egg-info
---
0755
fasteners
---
0755
fasteners-0.14.1.egg-info
---
0755
filelock
---
0755
filelock-3.6.0.egg-info
---
0755
future
---
0755
future-0.18.2.egg-info
---
0755
genshi
---
0755
gi
---
0755
hgdemandimport
---
0755
hgext
---
0755
hgext3rd
---
0755
httplib2
---
0755
httplib2-0.20.2.egg-info
---
0755
idna
---
0755
idna-3.3.egg-info
---
0755
imagesize-1.3.0.egg-info
---
0755
importlib_metadata
---
0755
importlib_metadata-4.6.4.egg-info
---
0755
iotop
---
0755
janitor
---
0755
jeepney
---
0755
jeepney-0.7.1.dist-info
---
0755
jinja2
---
0755
jmespath
---
0755
jmespath-0.10.0.egg-info
---
0755
jsonpatch-1.32.egg-info
---
0755
jsonpointer-2.0.egg-info
---
0755
jsonschema
---
0755
jsonschema-3.2.0.egg-info
---
0755
jwt
---
0755
keyring
---
0755
keyring-23.5.0.egg-info
---
0755
launchpadlib
---
0755
launchpadlib-1.10.16.egg-info
---
0755
lazr
---
0755
lazr.restfulclient-0.14.4.egg-info
---
0755
lazr.uri-1.0.6.egg-info
---
0755
libfuturize
---
0755
libpasteurize
---
0755
lockfile
---
0755
lockfile-0.12.2.egg-info
---
0755
magic
---
0755
markupsafe
---
0755
mercurial
---
0755
monotonic-1.6.egg-info
---
0755
more_itertools
---
0755
more_itertools-8.10.0.egg-info
---
0755
mysqlclient-1.4.6.egg-info
---
0755
nacl
---
0755
netifaces-0.11.0.egg-info
---
0755
netplan
---
0755
numpy
---
0755
numpy-1.21.5.egg-info
---
0755
oauthlib
---
0755
oauthlib-3.2.0.egg-info
---
0755
packaging
---
0755
packaging-21.3.egg-info
---
0755
past
---
0755
pexpect
---
0755
pip
---
0755
pip-22.0.2.dist-info
---
0755
pkg_resources
---
0755
platformdirs
---
0755
platformdirs-2.5.1.dist-info
---
0755
psycopg2
---
0755
psycopg2-2.9.2.egg-info
---
0755
ptyprocess
---
0755
ptyprocess-0.7.0.dist-info
---
0755
pyOpenSSL-21.0.0.egg-info
---
0755
pyasn1
---
0755
pyasn1-0.4.8.egg-info
---
0755
pycurl-7.44.1.egg-info
---
0755
pygments
---
0755
pygtkcompat
---
0755
pymacaroons
---
0755
pymacaroons-0.13.0.egg-info
---
0755
pyparsing-2.4.7.egg-info
---
0755
pyrsistent
---
0755
pyrsistent-0.18.1.egg-info
---
0755
pyserial-3.5.egg-info
---
0755
pysvn
---
0755
pysvn-1.9.15.egg-info
---
0755
python_apt-2.4.0+ubuntu4.1.egg-info
---
0755
python_dateutil-2.8.1.egg-info
---
0755
python_debian-0.1.43+ubuntu1.1.egg-info
---
0755
python_magic-0.4.24.egg-info
---
0755
pytz
---
0755
pytz-2022.1.egg-info
---
0755
requests
---
0755
requests-2.25.1.egg-info
---
0755
roman-3.3.egg-info
---
0755
rsa
---
0755
rsa-4.8.egg-info
---
0755
s3cmd-2.2.0.egg-info
---
0755
s3transfer
---
0755
s3transfer-0.5.0.egg-info
---
0755
secretstorage
---
0755
serial
---
0755
setuptools
---
0755
setuptools-59.6.0.egg-info
---
0755
simplejson
---
0755
simplejson-3.17.6.egg-info
---
0755
six-1.16.0.egg-info
---
0755
snowballstemmer
---
0755
snowballstemmer-2.2.0.egg-info
---
0755
softwareproperties
---
0755
sos
---
0755
sos-4.9.2.egg-info
---
0755
sphinx
---
0755
sqlparse
---
0755
sqlparse-0.4.2.egg-info
---
0755
ssh_import_id
---
0755
ssh_import_id-5.11.egg-info
---
0755
systemd
---
0755
trac
---
0755
tracopt
---
0755
twisted
---
0755
uaclient
---
0755
ubuntu_pro_client-8001.egg-info
---
0755
ufw
---
0755
unattended_upgrades-0.1.egg-info
---
0755
urllib3
---
0755
urllib3-1.26.5.egg-info
---
0755
virtualenv
---
0755
virtualenv-20.13.0+ds.dist-info
---
0755
wadllib
---
0755
wadllib-1.3.6.egg-info
---
0755
wheel
---
0755
wheel-0.37.1.egg-info
---
0755
xapian
---
0755
yaml
---
0755
zipp-1.0.0.egg-info
---
0755
_cffi_backend.cpython-310-x86_64-linux-gnu.so
194472 bytes
0644
_dbus_bindings.cpython-310-x86_64-linux-gnu.so
168152 bytes
0644
_dbus_glib_bindings.cpython-310-x86_64-linux-gnu.so
23040 bytes
0644
_pg.cpython-310-x86_64-linux-gnu.so
114376 bytes
0644
_pyrsistent_version.py
23 bytes
0644
_snack.cpython-310-x86_64-linux-gnu.so
47888 bytes
0644
apport_python_hook.py
8063 bytes
0644
apt_inst.cpython-310-x86_64-linux-gnu.so
60064 bytes
0644
apt_pkg.cpython-310-x86_64-linux-gnu.so
347096 bytes
0644
blinker-1.4.egg-info
3901 bytes
0644
command_not_found-0.3.egg-info
189 bytes
0644
deb822.py
273 bytes
0644
debconf.py
6769 bytes
0644
distro_info.py
12528 bytes
0644
drv_libxml2.py
15376 bytes
0644
imagesize.py
13352 bytes
0644
iotop-0.6.egg-info
348 bytes
0644
jsonpatch.py
28813 bytes
0644
jsonpointer.py
9796 bytes
0644
libxml2.py
346308 bytes
0644
libxml2mod.cpython-310-x86_64-linux-gnu.so
437808 bytes
0644
lsb_release.py
14901 bytes
0644
mercurial-6.1.1-py3.10.egg-info
1330 bytes
0644
monotonic.py
7169 bytes
0644
netifaces.cpython-310-x86_64-linux-gnu.so
23232 bytes
0644
pexpect-4.8.0.egg-info
2285 bytes
0644
pg.py
102204 bytes
0644
pgdb.py
63567 bytes
0644
problem_report.py
26867 bytes
0644
pvectorc.cpython-310-x86_64-linux-gnu.so
37552 bytes
0644
pycurl.cpython-310-x86_64-linux-gnu.so
143976 bytes
0644
pyparsing.py
273365 bytes
0644
roman.py
3664 bytes
0644
schedutils-0.6.egg-info
291 bytes
0644
schedutils.cpython-310-x86_64-linux-gnu.so
15136 bytes
0644
six.py
34549 bytes
0644
snack.py
31134 bytes
0644
systemd_python-234.egg-info
586 bytes
0644
ufw-0.36.1.egg-info
263 bytes
0644
zipp.py
6914 bytes
0644
N4ST4R_ID | Naxtarrr