              thread.start()
              self._threads.append(thread)
          logger.debug("Started all threads '%s': %s", self._name, len(self._threads))
  
      def completed(self):
          """ Return False if there are any alive threads else True """
          retval = all(not thread.is_alive() for thread in self._threads)
          logger.debug(retval)
          return retval
  
      def join(self):
 
</s> remove     def join(self):
 </s> add     def join(self) -> None: </s> remove     def is_alive(self):
        """ Return true if any thread is alive else false """
 </s> add     def is_alive(self) -> bool:
        """ Check if any threads are still alive

        Returns
        -------
        bool
            ``True`` if any threads are alive. ``False`` if no threads are alive
        """ </s> remove     def start(self):
        """ Start a thread with the given method and args """
 </s> add     def start(self) -> None:
        """ Start all the threads for the given method, args and kwargs """ </s> remove     def errors(self):
        """ Return a list of thread errors """
 </s> add     def errors(self) -> List[_ErrorType]:
        """ list: List of thread error values """
    def completed(self) -> bool:
        """ Check if all threads have completed

        Returns
        -------
        ``True`` if all threads have completed otherwise ``False``
        """
              thread.start()
              self._threads.append(thread)
          logger.debug("Started all threads '%s': %s", self._name, len(self._threads))
  
    def completed(self) -> bool:
        """ Check if all threads have completed

        Returns
        -------
        ``True`` if all threads have completed otherwise ``False``
        """
    def completed(self) -> bool:
        """ Check if all threads have completed

        Returns
        -------
        ``True`` if all threads have completed otherwise ``False``
        """
          retval = all(not thread.is_alive() for thread in self._threads)
          logger.debug(retval)
          return retval
  
      def join(self):
keep keep keep keep replace replace keep keep keep keep keep
 bugfix - timelapse image loader
multithreading.py - typing + docs 
lib/multithreading.py