<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def run(self):
 """Wrapper to start the CherryPy server This function throws a PortNotFree exception if any socket error is raised. :return: None """

        def _started_callback():
            """Callback function when Cherrypy Engine is started"""
            cherrypy.log("CherryPy engine started and listening...")

        self.cherrypy_thread = None
        try:
            cherrypy.log("Starting CherryPy engine on %s" % (self.uri))
            self.cherrypy_thread = cherrypy.engine.start_with_callback(_started_callback)
            cherrypy.engine.block()
            cherrypy.log("Exited from the engine block")
        except socket.error as exp:
            raise PortNotFree("Error: Sorry, the HTTP server did not started correctly: error: %s"
                              % (str(exp)))