'Run the method on each worker process, and collect the result of execution.
The runner method will receive \'G\' as its first argument, followed by the arguments
in the args_list, if any
:return:'

def run_each(self, runner, args_list=None):

    if (args_list is None):
        args_list = ([tuple()] * self.n_parallel)
    assert (len(args_list) == self.n_parallel)
    if (self.n_parallel > 1):
        results = self.pool.map_async(_worker_run_each, [(runner, args) for args in args_list])
        for i in range(self.n_parallel):
            self.worker_queue.get()
        for i in range(self.n_parallel):
            self.queue.put(None)
        return results.get()
    return [runner(self.G, *args_list[0])]
