diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2017-11-16 02:11:45 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-11-16 02:11:45 (GMT) |
commit | a7368ac6360246b1ef7f8f152963c2362d272183 (patch) | |
tree | 4fb2375f4d4aa4287f4d7688631111512d9e4446 /Python/import.c | |
parent | f7e5b56c37eb859e225e886c79c5d742c567ee95 (diff) | |
download | cpython-a7368ac6360246b1ef7f8f152963c2362d272183.zip cpython-a7368ac6360246b1ef7f8f152963c2362d272183.tar.gz cpython-a7368ac6360246b1ef7f8f152963c2362d272183.tar.bz2 |
bpo-32030: Enhance Py_Main() (#4412)
Parse more env vars in Py_Main():
* Add more options to _PyCoreConfig:
* faulthandler
* tracemalloc
* importtime
* Move code to parse environment variables from _Py_InitializeCore()
to Py_Main(). This change fixes a regression from Python 3.6:
PYTHONUNBUFFERED is now read before calling pymain_init_stdio().
* _PyFaulthandler_Init() and _PyTraceMalloc_Init() now take an
argument to decide if the module has to be enabled at startup.
* tracemalloc_start() is now responsible to check the maximum number
of frames.
Other changes:
* Cleanup Py_Main():
* Rename some pymain_xxx() subfunctions
* Add pymain_run_python() subfunction
* Cleanup Py_NewInterpreter()
* _PyInterpreterState_Enable() now reports failure
* init_hash_secret() now considers pyurandom() failure as an "user
error": don't fail with abort().
* pymain_optlist_append() and pymain_strdup() now sets err on memory
allocation failure.
Diffstat (limited to 'Python/import.c')
-rw-r--r-- | Python/import.c | 31 |
1 files changed, 6 insertions, 25 deletions
diff --git a/Python/import.c b/Python/import.c index fe60844..fef6398 100644 --- a/Python/import.c +++ b/Python/import.c @@ -1675,10 +1675,9 @@ PyImport_ImportModuleLevelObject(PyObject *name, PyObject *globals, } else { /* 1 -- true, 0 -- false, -1 -- not initialized */ - static int ximporttime = -1; + int importtime = interp->core_config.importtime; static int import_level; static _PyTime_t accumulated; - _Py_IDENTIFIER(importtime); _PyTime_t t1 = 0, accumulated_copy = accumulated; @@ -1687,32 +1686,14 @@ PyImport_ImportModuleLevelObject(PyObject *name, PyObject *globals, * Anyway, importlib._find_and_load is much slower than * _PyDict_GetItemIdWithError(). */ - if (ximporttime < 0) { - const char *envoption = Py_GETENV("PYTHONPROFILEIMPORTTIME"); - if (envoption != NULL && *envoption != '\0') { - ximporttime = 1; - } - else { - PyObject *xoptions = PySys_GetXOptions(); - PyObject *value = NULL; - if (xoptions) { - value = _PyDict_GetItemIdWithError( - xoptions, &PyId_importtime); - } - if (value == NULL && PyErr_Occurred()) { - goto error; - } - if (value != NULL || Py_IsInitialized()) { - ximporttime = (value == Py_True); - } - } - if (ximporttime > 0) { + if (importtime) { + static int header = 1; + if (header) { fputs("import time: self [us] | cumulative | imported package\n", stderr); + header = 0; } - } - if (ximporttime > 0) { import_level++; t1 = _PyTime_GetPerfCounter(); accumulated = 0; @@ -1731,7 +1712,7 @@ PyImport_ImportModuleLevelObject(PyObject *name, PyObject *globals, PyDTrace_IMPORT_FIND_LOAD_DONE(PyUnicode_AsUTF8(abs_name), mod != NULL); - if (ximporttime > 0) { + if (importtime) { _PyTime_t cum = _PyTime_GetPerfCounter() - t1; import_level--; |