              try:
                  self._buffer_tokens.get(block=False, timeout=0.01)
              except Queue.Empty:
                  break
          self._buffer_tokens.close()
          for worker in self._worker:
              worker.join()
  
      def stop(self):
          """ Stop Workers """
 
</s> remove         self._result_tokens.close()
 </s> add  </s> remove         if log_queue and log_level is not None and mp.get_start_method() != "fork":
            set_root_logger(log_level, queue=log_queue)
 </s> add         set_root_logger(log_level, queue=log_queue) </s> remove                 if stop_event.is_set() or i is None:
 </s> add                 if stop_event.is_set() or i is None or i == "EOF": </s> remove         return mp.Process(target=self._runner, kwargs=kwargs)
 </s> add         return self.CTX.Process(target=self._runner, kwargs=kwargs)
              try:
                  self._buffer_tokens.get(block=False, timeout=0.01)
              except Queue.Empty:
                  break

          for worker in self._worker:
              worker.join()
  
      def stop(self):
          """ Stop Workers """
keep keep keep keep replace keep keep keep keep keep
 Minor FixedProducerDispatcher changes. Fix timelapse bug 
lib/multithreading.py