def METHOD_NAME(self, proj_name):
    """
    Return the (cached) project app.
    """
    METHOD_NAME, timestamps = self.apps.get(proj_name, (None, None))
    if METHOD_NAME:
        if self.loader.needs_reload(proj_name, timestamps):
            # discard cached app
            METHOD_NAME = None
    if not METHOD_NAME:
        with self._app_init_lock:
            METHOD_NAME, timestamps = self.apps.get(proj_name, (None, None))
            if self.loader.needs_reload(proj_name, timestamps):
                METHOD_NAME, timestamps = self.create_app(proj_name)
                self.apps[proj_name] = METHOD_NAME, timestamps
            else:
                METHOD_NAME, timestamps = self.apps[proj_name]
    return METHOD_NAME