* Or use ``nanosleep()`` if available (resolution: 1 nanosecond);
* Or use ``select()`` (resolution: 1 microsecond).
+ .. audit-event:: time.sleep secs
+
.. versionchanged:: 3.11
On Unix, the ``clock_nanosleep()`` and ``nanosleep()`` functions are now
used if available. On Windows, a waitable timer is now used.
:pep:`475` for the rationale).
+ .. versionchanged:: 3.13
+ Raises an auditing event.
+
.. index::
single: % (percent); datetime format
assert hook not in o
+def test_time():
+ import time
+
+ def hook(event, args):
+ if event.startswith("time."):
+ print(event, *args)
+ sys.addaudithook(hook)
+
+ time.sleep(0)
+ time.sleep(0.0625) # 1/16, a small exact float
+ try:
+ time.sleep(-1)
+ except ValueError:
+ pass
+
def test_sys_monitoring_register_callback():
import sys
if returncode:
self.fail(stderr)
+ def test_time(self):
+ returncode, events, stderr = self.run_python("test_time")
+ if returncode:
+ self.fail(stderr)
+
+ if support.verbose:
+ print(*events, sep='\n')
+
+ actual = [(ev[0], ev[2]) for ev in events]
+ expected = [("time.sleep", "0"),
+ ("time.sleep", "0.0625"),
+ ("time.sleep", "-1")]
+
+ self.assertEqual(actual, expected)
+
def test_sys_monitoring_register_callback(self):
returncode, events, stderr = self.run_python("test_sys_monitoring_register_callback")
--- /dev/null
+:func:`time.sleep` now raises an auditing event.
static PyObject *
time_sleep(PyObject *self, PyObject *timeout_obj)
{
+ PySys_Audit("time.sleep", "O", timeout_obj);
+
_PyTime_t timeout;
if (_PyTime_FromSecondsObject(&timeout, timeout_obj, _PyTime_ROUND_TIMEOUT))
return NULL;