@@ -400,12 +400,25 @@ def collect(module_pattern, path, pred):
retval = []
for module_file in os.listdir(path):
- if not module_file.endswith(".py") or module_file ==
"__init__.py":
+ if module_file == "__init__.py":
continue
- mod_name = module_file[:-3]
- module = importlib.import_module(module_pattern % mod_name)
-
+ try:
+ mod_name = module_file[:module_file.rindex(".")]
+ except ValueError:
+ mod_name = module_file
+
+ try:
+ imp.acquire_lock()
+ mod_info = imp.find_module(mod_name, path)
+ module = imp.load_module(module_pattern % mod_name, *mod_info)
+ imp.release_lock()
+ except ImportError:
+ continue
+ finally:
+ if mod_info[0]:
+ mod_info[0].close()
+
I wish the imp module locking thing worked more like other lock-related
code so you could do:
with imp.lock do:
...
but that's hardly a knock on your patch.
- Chris