def _multithreaded_runner(in_queue, out_queue, func):
    """Actual process running in parallel. Accepts a function to perform on
    members of the queue. Only applies the function to all but the first item of
    each member

    :param in_queue: queue which is providing the inputs
    :param out_queue: queue which holds the outputs
    """
    while True:
        in_args = in_queue.get()
        if in_args is None:
            break
        else:
            out_queue.put((in_args[0], func(*in_args[1:])))
