          self.stop()
          while self._open_worker:
              if self._result_tokens.get() is None:
                  self._open_worker -= 1
          self._result_tokens.close()
          while True:
              try:
                  self._buffer_tokens.get(block=False, timeout=0.01)
              except Queue.Empty:
                  break
 
</s> remove         self._buffer_tokens.close()
 </s> add  </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         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 viewer is not None:
 </s> add         if do_preview: </s> remove         if timelapse_kwargs is not None:
 </s> add         if do_timelapse:
          self.stop()
          while self._open_worker:
              if self._result_tokens.get() is None:
                  self._open_worker -= 1

          while True:
              try:
                  self._buffer_tokens.get(block=False, timeout=0.01)
              except Queue.Empty:
                  break
keep keep keep keep replace keep keep keep keep keep
 Minor FixedProducerDispatcher changes. Fix timelapse bug 
lib/multithreading.py