'Loop once through all input consumers and route their results.
:return: (finished, consumer_forced_end) or None if we shouldn\'t call
this method anymore.'

def _route_one_fuzzable_request_batch(self, _input, output, finished, consumer_forced_end):

    for url_producer in _input:
        if (len(_input) == len((finished | consumer_forced_end))):
            return
        if (url_producer in finished):
            continue
        if (url_producer in consumer_forced_end):
            continue
        try:
            result_item = url_producer.get_result(timeout=0.1)
        except (TimeoutError, Queue.Empty) as _:
            if (not url_producer.has_pending_work()):
                finished.add(url_producer)
        else:
            if (result_item == POISON_PILL):
                consumer_forced_end.add(url_producer)
            elif isinstance(result_item, ExceptionData):
                self._handle_consumer_exception(result_item)
            else:
                (_, _, fuzzable_request_inst) = result_item
                fmt = '%s    is    returning    objects    of    class    %s    instead    of    FuzzableRequest.'
                assert isinstance(fuzzable_request_inst, FuzzableRequest), (fmt % (url_producer, type(fuzzable_request_inst)))
                for url_consumer in output:
                    url_consumer.in_queue_put(fuzzable_request_inst)
                finished = set()
    return (finished, consumer_forced_end)
