Restarts the loop function

        Tries to restart the loop thread using the current thread. Raises RuntimeError if a previous call to Loop.start
        was not made.

        :param subthread: True/False value used when calling Loop.start(subthread=subthread). If set to None it uses the
        same value as the last call to Loop.start.

def restart(self, subthread=None):
        """Restarts the loop function

        Tries to restart the loop thread using the current thread. Raises RuntimeError if a previous call to Loop.start
        was not made.

        :param subthread: True/False value used when calling Loop.start(subthread=subthread). If set to None it uses the
        same value as the last call to Loop.start.
        """
        if self._in_subthread is None:
            raise RuntimeError('A call to start must first be placed before restart')
        self.stop(silent=True)
        if subthread is None:
            subthread = self._in_subthread
        self.__init__(self.target, self.args, self.kwargs, self.on_stop)
        self.start(subthread=subthread)