<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def start(self, hostname=None, port=None, templates_path=None):
 """ Starts the web interface. Args: hostname (str, optional):
 host name to listen from. (Default value = None) port (int, optional):
 port to listen from. (Default value = None) templates_path (str, optional):
 path to look for templates. (Default value = None) """

        self.hostname = hostname if hostname else "localhost"
        if port:
            self.port = port
        elif not self.port:
            self.port = unused_port(self.hostname)
        if templates_path:
            self.loaders.insert(0, jinja2.FileSystemLoader(templates_path))
            self._set_loaders()
        self.setup_routes()
        self.runner = aioweb.AppRunner(self.app)
        return self.agent.submit(start_server_in_loop(self.runner, self.hostname, self.port, self.agent))