]> granicus.if.org Git - python/commitdiff
bpo-31415: Support PYTHONPROFILEIMPORTTIME envvar equivalent to -X importtime (#4240)
authorBarry Warsaw <barry@python.org>
Thu, 2 Nov 2017 23:13:36 +0000 (16:13 -0700)
committerGitHub <noreply@github.com>
Thu, 2 Nov 2017 23:13:36 +0000 (16:13 -0700)
Support PYTHONPROFILEIMPORTTIME envvar equivalent to -X importtime

Doc/using/cmdline.rst
Misc/NEWS.d/3.7.0a2.rst
Python/import.c

index 8ab26f595578fd19a5b549d3f5e7bdb6aa3125c2..310891d6d0aaa3ba2b93a55ae263421393f4750f 100644 (file)
@@ -411,7 +411,8 @@ Miscellaneous options
    * ``-X importtime`` to show how long each import takes. It shows module name,
      cumulative time (including nested imports) and self time (exluding nested
      imports).  Note that its output may be broken in multi threaded application.
-     Typical usage is ``python3 -X importtime -c 'import asyncio'``.
+     Typical usage is ``python3 -X importtime -c 'import asyncio'``.  See also
+     :envvar:`PYTHONPROFILEIMPORTTIME`.
 
    It also allows passing arbitrary values and retrieving them through the
    :data:`sys._xoptions` dictionary.
@@ -429,7 +430,7 @@ Miscellaneous options
       The ``-X showalloccount`` option.
 
    .. versionadded:: 3.7
-      The ``-X importtime`` option.
+      The ``-X importtime`` and :envvar:`PYTHONPROFILEIMPORTTIME` options.
 
 
 Options you shouldn't use
@@ -650,6 +651,15 @@ conflict.
    .. versionadded:: 3.4
 
 
+.. envvar:: PYTHONPROFILEIMPORTTIME
+
+   If this environment variable is set to a non-empty string, Python will
+   show how long each import takes.  This is exactly equivalent to setting
+   ``-X importtime`` on the command line.
+
+   .. versionadded:: 3.7
+
+
 .. envvar:: PYTHONASYNCIODEBUG
 
    If this environment variable is set to a non-empty string, enable the
index 6df77153a09b6d78d14478edca2440cc01f14825..7784bb77be3253f028dbc3d8f406d844ac167bcc 100644 (file)
@@ -166,7 +166,8 @@ special method lookups.  Patch by Stefan Behnel.
 .. section: Core and Builtins
 
 Add ``-X importtime`` option to show how long each import takes. It can be
-used to optimize application's startup time.
+used to optimize application's startup time.  Support the
+:envvar:`PYTHONPROFILEIMPORTTIME` as an equivalent way to enable this.
 
 ..
 
index d396b4de7934dca8775f25820aca3a4a0563fe00..7ba1842e751916c4a7d481eebc53a52209224e03 100644 (file)
@@ -1682,10 +1682,17 @@ PyImport_ImportModuleLevelObject(PyObject *name, PyObject *globals,
          * _PyDict_GetItemId()
          */
         if (ximporttime == 0) {
-            PyObject *xoptions = PySys_GetXOptions();
-            if (xoptions) {
-                PyObject *value = _PyDict_GetItemId(xoptions, &PyId_importtime);
-                ximporttime = (value == Py_True);
+            char *envoption = Py_GETENV("PYTHONPROFILEIMPORTTIME");
+            if (envoption != NULL && strlen(envoption) > 0) {
+                ximporttime = 1;
+            }
+            else {
+                PyObject *xoptions = PySys_GetXOptions();
+                if (xoptions) {
+                    PyObject *value = _PyDict_GetItemId(
+                        xoptions, &PyId_importtime);
+                    ximporttime = (value == Py_True);
+                }
             }
             if (ximporttime) {
                 fputs("import time: self [us] | cumulative | imported package\n",