Clarify the comment with the overall design: have each worker stop immediately after processing its input.

I'm curious why you need that though. Won't the yield semantics of the worker processes make it possible to keep them around [essentially, as generators]? I think it might be more fruitful to look at how you could refactor WorkerProcess ... I think you could essentially do,

class SerialWorkerRoutine(WorkerRoutine):
    def explicitly_close_queues(self): pass # Don't close queues, since we haven't actually forked!

    def init(self): # make this called by WorkerRoutine where appropriate
        self.fcn_iter = self.fcn(self.worker_input_generator(), *self.init_args, **self.init_kwargs)
        iter(self.fcn_iter) # check that it's iterable

    def run(self):
        '''Only run one step of the worker function.'''
        self.output_queue.put( (self.input_index, 'output', output) )
        ... # other stuff from WorkerRoutine.run()'s inner loop