  
          def get_free_slot():
              while not stop_event.is_set():
                  i = buffer_tokens.get()
                  if stop_event.is_set() or i is None:
                      break
                  yield WorkerBuffer(i, np_data[i], stop_event, result_tokens)
  
          args = tuple((get_free_slot(),)) + tuple(args)
          try:
 
</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         self._result_tokens = self.QUEUE()
 </s> add         self._result_tokens = out_queue </s> remove         self._buffer_tokens = self.QUEUE()
 </s> add         self._buffer_tokens = in_queue </s> remove         self._buffer_tokens.close()
 </s> add 
                if stop_event.is_set() or i is None or i == "EOF":
  
          def get_free_slot():
              while not stop_event.is_set():
                  i = buffer_tokens.get()
                if stop_event.is_set() or i is None or i == "EOF":
                      break
                  yield WorkerBuffer(i, np_data[i], stop_event, result_tokens)
  
          args = tuple((get_free_slot(),)) + tuple(args)
          try:
keep keep keep keep replace keep keep keep keep keep
 Minor FixedProducerDispatcher changes. Fix timelapse bug 
lib/multithreading.py