aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Doc/library/sys.rst
diff options
context:
space:
mode:
Diffstat (limited to 'Doc/library/sys.rst')
-rw-r--r--Doc/library/sys.rst58
1 files changed, 58 insertions, 0 deletions
diff --git a/Doc/library/sys.rst b/Doc/library/sys.rst
index fbfd5e1e75b..a5c4ffa38fe 100644
--- a/Doc/library/sys.rst
+++ b/Doc/library/sys.rst
@@ -1282,6 +1282,64 @@ always available. Unless explicitly noted otherwise, all variables are read-only
.. versionadded:: 3.5
+.. data:: _jit
+
+ Utilities for observing just-in-time compilation.
+
+ .. impl-detail::
+
+ JIT compilation is an *experimental implementation detail* of CPython.
+ ``sys._jit`` is not guaranteed to exist or behave the same way in all
+ Python implementations, versions, or build configurations.
+
+ .. versionadded:: next
+
+ .. function:: _jit.is_available()
+
+ Return ``True`` if the current Python executable supports JIT compilation,
+ and ``False`` otherwise. This can be controlled by building CPython with
+ the ``--experimental-jit`` option on Windows, and the
+ :option:`--enable-experimental-jit` option on all other platforms.
+
+ .. function:: _jit.is_enabled()
+
+ Return ``True`` if JIT compilation is enabled for the current Python
+ process (implies :func:`sys._jit.is_available`), and ``False`` otherwise.
+ If JIT compilation is available, this can be controlled by setting the
+ :envvar:`PYTHON_JIT` environment variable to ``0`` (disabled) or ``1``
+ (enabled) at interpreter startup.
+
+ .. function:: _jit.is_active()
+
+ Return ``True`` if the topmost Python frame is currently executing JIT
+ code (implies :func:`sys._jit.is_enabled`), and ``False`` otherwise.
+
+ .. note::
+
+ This function is intended for testing and debugging the JIT itself.
+ It should be avoided for any other purpose.
+
+ .. note::
+
+ Due to the nature of tracing JIT compilers, repeated calls to this
+ function may give surprising results. For example, branching on its
+ return value will likely lead to unexpected behavior (if doing so
+ causes JIT code to be entered or exited):
+
+ .. code-block:: pycon
+
+ >>> for warmup in range(BIG_NUMBER):
+ ... # This line is "hot", and is eventually JIT-compiled:
+ ... if sys._jit.is_active():
+ ... # This line is "cold", and is run in the interpreter:
+ ... assert sys._jit.is_active()
+ ...
+ Traceback (most recent call last):
+ File "<stdin>", line 5, in <module>
+ assert sys._jit.is_active()
+ ~~~~~~~~~~~~~~~~~~^^
+ AssertionError
+
.. data:: last_exc
This variable is not always defined; it is set to the exception instance