Ответ 1
python hello.py
(A) запускает код один раз, когда (A) вызывает import hello
, код запускается снова (B), когда (A) и (B) вызывают reload(hello)
, код запускается еще дважды, в четыре раза больше.
В общем, для времени жизни программы код модуля будет выполняться в следующие моменты времени:
- Если это основной модуль
- Когда он импортирует первый время любым модулем (включая себя)
- Любое время
reload()
вызывается в модуле
Что касается того, почему reload()
не называется рекурсивно, есть ранняя точка выхода для функции PyImport_ReloadModule() (CPython, файл - import.c), чтобы предотвратить это:
http://svn.python.org/view/python/trunk/Python/import.c?view=markup#l2646
...
existing_m = PyDict_GetItemString(modules_reloading, name);
if (existing_m != NULL) {
/* Due to a recursive reload, this module is already
being reloaded. */
Py_INCREF(existing_m);
return existing_m;
}
... load module code is below here