def batch_submit(func, batches, client, *args, **kwargs):
    """
    Args:
        func: function to call using client.
        batches (list): list of input(s) per batch,
            e.g. from split_dataframe or split_zip
        client (concurrent.futures.Executor, dask.distributed.Client)
        *args: arguments to pass to func.
        **kwargs: keyword arguments to pass to func.

    Returns:
        future_list (list)
    """
    future_list = []
    for batch in batches:
        future = client.submit(func, batch, *args, **kwargs)
        future_list.append(future)
    return future_list