':param function: Called in parallel with one machine as its argument.
:param machines: A list of machines to call function(machine) on.
:param timeout: Seconds after which the function call should timeout.
:return: A list of machines on which function(machine) returned
without raising an exception.'

def parallel_on_machines(self, function, machines, timeout=None):

    results = self.parallel_simple(function, machines, timeout=timeout, return_results=True)
    success_machines = []
    for (result, machine) in itertools.izip(results, machines):
        if (not isinstance(result, Exception)):
            success_machines.append(machine)
    return success_machines
