code: def stop(self, timeout=5):
          
          self._running = False
          end_time = time.time() + timeout
          for reader in self._readers:
              if isinstance(reader, threading.Thread):
                  now = time.time()
                  if now < end_time:
                      reader.join(end_time - now)
              else:
                  # reader is a file descriptor
                  self._loop.remove_reader(reader)
          for listener in self.listeners:
              if hasattr(listener, 'stop'):
                  listener.stop()
docs: Stop notifying Listeners when new :class:`~can.Message` objects arrive
          and call :meth:`~can.Listener.stop` on each Listener.
  
          :param float timeout:
              Max time in seconds to wait for receive threads to finish.
              Should be longer than timeout given at instantiation.