<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, timeout=None):
 """Start the client in a new thread. Parameters timeout : float in seconds Seconds to wait for client thread to start. Do not specify a timeout if start() is being called from the same ioloop that this client will be installed on, since it will block the ioloop without progressing. """

        if self._running.isSet():
            raise RuntimeError("Device client already started.")
        # Make sure we have an ioloop
        self.ioloop = self._ioloop_manager.get_ioloop()
        if timeout:
            t0 = self.ioloop.time()
        self._ioloop_manager.start(timeout)
        self.ioloop.add_callback(self._install)
        if timeout:
            remaining_timeout = timeout - (self.ioloop.time() - t0)
            self.wait_running(remaining_timeout)