code: def start(self, *args, **kwargs):
          
          if self.is_running():
              raise RuntimeError('Already started')
          self._running = self.run(*args, **kwargs)
          try:
              yielded = next(self._running)
          except StopIteration:
              raise TypeError('run() must yield just one time')
          if yielded is not None:
              raise TypeError('run() must yield without value')
docs: Starts the instance.
  
          :raises RuntimeError: has been already started.
          :raises TypeError: :meth:`run` is not canonical.