Best way to validate multiple networks in parallel?

I am trying to find the best hyperparameters for a simple CNN. To achieve this, I want to, for example, evaluate 100 hyperparameter configurations on a multiple budgets, for example on 5, 10 and 15 epochs.

What would be the best way to achieve this? That is, how I can most efficiently run multiple trainings in parallel? So far I have been using something like this:

   # Define the queue, which is passed to the train function and the final validation score is inserted
    queue = Queue()

    # samples n_configs from the configuration space
    samples = configspace.sample_configuration(size=n_evals)

    # maps a process to the required budget
    mapping = {}

    # define the budgets on which the model should be trained on, e.g. epochs
    budgets = [5, 10, 15]

    # number of configs we want to evaluate
    n_evals = 100

    # number of workes we want to use in parallel
    n_workers = 3

    # evaluate the configs 
    for budget in budgets:
        processes = []
        configs_processed = 0
        while configs_processed < n_evals - n_workers:
            for _ in range(n_workers):
                p = Process(target=train_funciton, args=(samples[configs_processed], budget, queue))
                # the mapping is required, so we know what processes was associated with which budget
                mapping[p] = budget
                configs_processed += 1
                p.start()
                processes.append(p)

            for processs in processes:
                processs.join()
                val_error = queue.get()
                results[mapping[processs]].append(val_error)

I am pretty sure there must be a better way, and I hope someone can show me how it can be done better.