def run(self, input_queue, output_queue):
        self.input_queue, self.output_queue = input_queue, output_queue
        self.input_index = None
        self.debug("starting; PID {0}", os.getpid())
        try:
            fcn_iter = self.fcn(
                self.worker_input_generator(),
                *self.init_args,
                **self.init_kwargs
            )
            try:
                iter(fcn_iter)
            except TypeError:
                vimap.exception_handling.print_warning(
                    "Your worker function must yield values for inputs it consumes!",
                    fcn_return_value=fcn_iter)
                assert False
            for output in fcn_iter:
                self.handle_output(output)
        except Exception:
            ec = vimap.exception_handling.ExceptionContext.current()
            self.debug('{0}', ec.formatted_traceback)
            self.output_queue.put((self.input_index, 'exception', ec))

        self.explicitly_close_queues()
        self.debug("exiting")
Takes ordered items from input_queue, lets `fcn` iterate over
dataset/ETHPy150Open gatoatigrado/vimap/vimap/real_worker_routine.py/WorkerRoutine.run