      """
      EVENT = mp.Event
      QUEUE = mp.Queue
  
      def __init__(self, method, shapes,
                   args=tuple(), kwargs={}, ctype=c_float, workers=1, buffers=None):
          logger.debug("Initializing %s: (method: '%s', shapes: %s, args: %s, kwargs: %s, "
                       "ctype: %s, workers: %s, buffers: %s)", self.__class__.__name__, method,
                       shapes, args, kwargs, ctype, workers, buffers)
          if buffers is None:
 
</s> remove     EVENT = mp.Event
    QUEUE = mp.Queue
 </s> add     CTX = mp.get_context("spawn")
    EVENT = CTX.Event </s> remove     def train_one_batch(self, is_preview_iteration):
 </s> add     def train_one_batch(self, do_preview): </s> remove         self._result_tokens = self.QUEUE()
 </s> add         self._result_tokens = out_queue
    def __init__(self, method, shapes, in_queue, out_queue,
      """
      EVENT = mp.Event
      QUEUE = mp.Queue
  
    def __init__(self, method, shapes, in_queue, out_queue,
                   args=tuple(), kwargs={}, ctype=c_float, workers=1, buffers=None):
          logger.debug("Initializing %s: (method: '%s', shapes: %s, args: %s, kwargs: %s, "
                       "ctype: %s, workers: %s, buffers: %s)", self.__class__.__name__, method,
                       shapes, args, kwargs, ctype, workers, buffers)
          if buffers is None:
keep keep keep keep replace keep keep keep keep keep
 Minor FixedProducerDispatcher changes. Fix timelapse bug 
lib/multithreading.py