          self.name = "%s_FixedProducerDispatcher" % str(method)
          self._target_func = method
          self._shapes = shapes
          self._stop_event = self.EVENT()
          self._buffer_tokens = self.QUEUE()
          for i in range(buffers):
              self._buffer_tokens.put(i)
          self._result_tokens = self.QUEUE()
          worker_data, self.data = self._create_data(shapes, ctype, buffers)
          proc_args = {
 
</s> remove         self._result_tokens = self.QUEUE()
 </s> add         self._result_tokens = out_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             self.samples.images[side] = batcher.compile_sample(self.batch_size)
            if timelapse_kwargs:
 </s> add             if do_preview:
                self.samples.images[side] = batcher.compile_sample(self.batch_size)
            if do_timelapse: </s> remove             loss[side] = batcher.train_one_batch(is_preview_iteration)
            if not is_preview_iteration:
 </s> add             loss[side] = batcher.train_one_batch(do_preview)
            if not do_preview and not do_timelapse: </s> remove         is_preview_iteration = False if viewer is None else True
 </s> add         do_preview = False if viewer is None else True
        do_timelapse = False if timelapse_kwargs is None else True
        self._buffer_tokens = in_queue
          self.name = "%s_FixedProducerDispatcher" % str(method)
          self._target_func = method
          self._shapes = shapes
          self._stop_event = self.EVENT()
        self._buffer_tokens = in_queue
          for i in range(buffers):
              self._buffer_tokens.put(i)
          self._result_tokens = self.QUEUE()
          worker_data, self.data = self._create_data(shapes, ctype, buffers)
          proc_args = {
keep keep keep keep replace keep keep keep keep keep
 Minor FixedProducerDispatcher changes. Fix timelapse bug 
lib/multithreading.py