Significant speedup -- when a submodule imports a global module, add a
dummy entry to sys.modules, marking the absence of a submodule by the
same name.

Thus, if module foo.bar executes the statement "import time",
sys.modules['foo.time'] will be set to None, once the absence of a
module foo.time is confirmed (by looking for it in foo's path).

The next time when foo.bar (or any other submodule of foo) executes
"import time", no I/O is necessary to determine that there is no
module foo.time.

(Justification: It may seem strange to pollute sys.modules.  However,
since we're doing the lookup anyway it's definitely the fastest
solution.  This is the same convention that 'ni' uses and I haven't
heard any complaints.)
diff --git a/Python/import.c b/Python/import.c
index d62815e..a53abae 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -998,6 +998,7 @@
 				      char *buf, int *p_buflen));
 static PyObject *load_next Py_PROTO((PyObject *mod, PyObject *altmod,
 				     char **p_name, char *buf, int *p_buflen));
+static int mark_miss Py_PROTO((char *name));
 static int ensure_fromlist Py_PROTO((PyObject *mod, PyObject *fromlist,
 				     char *buf, int buflen));
 static PyObject * import_submodule Py_PROTO((PyObject *mod,
@@ -1168,11 +1169,17 @@
 	result = import_submodule(mod, p, buf);
 	if (result == Py_None && altmod != mod) {
 		Py_DECREF(result);
-		/* Here, altmod must be None */
-		strncpy(buf, name, len);
-		buf[len] = '\0';
-		*p_buflen = len;
-		result = import_submodule(altmod, buf, buf);
+		/* Here, altmod must be None and mod must not be None */
+		result = import_submodule(altmod, name, name);
+		if (result != NULL && result != Py_None) {
+			if (mark_miss(buf) != 0) {
+				Py_DECREF(result);
+				return NULL;
+			}
+			strncpy(buf, name, len);
+			buf[len] = '\0';
+			*p_buflen = len;
+		}
 	}
 	if (result == NULL)
 		return NULL;
@@ -1188,6 +1195,14 @@
 }
 
 static int
+mark_miss(name)
+	char *name;
+{
+	PyObject *modules = PyImport_GetModuleDict();
+	return PyDict_SetItemString(modules, name, Py_None);
+}
+
+static int
 ensure_fromlist(mod, fromlist, buf, buflen)
 	PyObject *mod;
 	PyObject *fromlist;