[Python-Dev] Fwd: Deadlock by a second import in a thread
Christian Heimes
lists at cheimes.de
Fri Oct 26 13:30:28 CEST 2007
Facundo Batista wrote:
> Feel free to do it. But note, that some imports are inside the call()
> function, this could have more implications that you see (at least I
> saw) at first glance.
CC to get Guido's attention
First of all I don't understand what you mean with "that some imports
are inside the call() function". Please elaborate on it.
I skimmed through the code and found just a handful of modules that are
important by name as well as imported more than once through the life
time of a python process. The most noticeable modules are time,
_strptime, resource, unicodedata and warnings. The other modules like
__builtin__, zlib and warnings are just loaded once or twice during the
boot strapping of the interpreter.
Guido:
What do you think about storing the modules in an "extern PyObject
*PyMod_Spam" variable? I could either store them when they are used the
first time or I could load them in Py_InitializeEx.
Christian
$ find -name '*.c' | xargs grep PyImport_ImportModule\(\"
./Objects/unicodeobject.c: m =
PyImport_ImportModule("unicodedata");
./Objects/exceptions.c: bltinmod = PyImport_ImportModule("__builtin__");
./PC/bdist_wininst/install.c: mod = PyImport_ImportModule("__builtin__");
./Modules/_ctypes/callbacks.c: mod = PyImport_ImportModule("ctypes");
./Modules/_ctypes/callbacks.c: mod = PyImport_ImportModule("ctypes");
./Modules/cPickle.c: if (!( copy_reg =
PyImport_ImportModule("copy_reg")))
./Modules/cPickle.c: if (!( t=PyImport_ImportModule("__builtin__")))
return -1;
./Modules/posixmodule.c: PyObject *m =
PyImport_ImportModule("resource");
./Modules/zipimport.c: zlib = PyImport_ImportModule("zlib");
/* import zlib */
./Modules/datetimemodule.c: PyObject *time =
PyImport_ImportModule("time");
./Modules/datetimemodule.c: PyObject *time =
PyImport_ImportModule("time");
./Modules/datetimemodule.c: time = PyImport_ImportModule("time");
./Modules/datetimemodule.c: if ((module =
PyImport_ImportModule("time")) == NULL)
./Modules/timemodule.c: PyObject *strptime_module =
PyImport_ImportModule("_strptime");
./Modules/timemodule.c: m = PyImport_ImportModule("time");
./Modules/gcmodule.c: tmod = PyImport_ImportModule("time");
./Modules/main.c: runpy = PyImport_ImportModule("runpy");
./Modules/main.c: v = PyImport_ImportModule("readline");
./Modules/parsermodule.c: copyreg = PyImport_ImportModule("copy_reg");
./Modules/_cursesmodule.c: PyObject *m = PyImport_ImportModule("curses");
./Python/mactoolboxglue.c: m = PyImport_ImportModule("MacOS");
./Python/pythonrun.c: warnings_module = PyImport_ImportModule("warnings");
./Python/pythonrun.c: PyObject *bimod =
PyImport_ImportModule("__builtin__");
./Python/pythonrun.c: m = PyImport_ImportModule("site");
./Python/errors.c: mod = PyImport_ImportModule("warnings");
./Python/import.c: zimpimport = PyImport_ImportModule("zipimport");
./Doc/tools/sphinx/jinja/_speedups.c: PyObject *datastructure =
PyImport_ImportModule("jinja.datastructure");
./Mac/Modules/MacOS.c: m = PyImport_ImportModule("macresource");
More information about the Python-Dev
mailing list