def METHOD_NAME(module, name, reload=0):
    # The use of _modules here is not thread safe, however, there is
    # no real harm in a race condition here.  If two threads
    # update the cache, then one will have simply worked a little
    # harder than need be.  So, in this case, we won't incur
    # the expense of a lock.
    old = _modules.get(module)
    if old is not None and name in old and not reload:
        return old[name]
    base, ext = os.path.splitext(module)
    if ext == 'py':
        # XXX should never happen; splitext() keeps '.' with the extension
        prefix = base
    else:
        prefix = module
    path = getPath('Extensions', prefix, suffixes=('', 'py'))
    if path is None:
        raise NotFound(
            "The specified module, '%s', couldn't be found." % module)
    __traceback_info__ = path, module
    try:
        with open(path) as f:
            execsrc = f.read()
    except Exception:
        raise NotFound("The specified module, '%s', "
                       "couldn't be opened." % module)
    execcode = compile(execsrc, path, 'exec')
    module_dict = {}
    exec(execcode, module_dict)
    if old is not None:
        # XXX Accretive??
        old.update(module_dict)
    else:
        _modules[module] = module_dict
    try:
        return module_dict[name]
    except KeyError:
        raise NotFound("The specified object, '%s', was not found "
                       "in module, '%s'." % (name, module))