mirror of
https://github.com/python/cpython.git
synced 2025-10-21 14:12:27 +00:00
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.
This commit is contained in:
parent
f7e5b56c37
commit
a7368ac636
12 changed files with 495 additions and 411 deletions
|
@ -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--;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue