def __schedule_group_close(self, delay, may_reduce):
     """Schedule the closure of the worker group after a specified delay."""
     if self.__state == STATE_OPEN:
         self.__state = STATE_JOINING
         call_after_delay(delay, self.close_group, may_reduce)
         return True
     return False
 def __wait_for_workers_cb(self, client, request, handler):
     """Schedule a callback to a given client when the result from the
     waitForWorkers variable is available.
     """
     metadata = request.metadata
     delay = float(metadata.get('delay', self.__join_phase.duration))
     thunk = lambda: self.__join_phase.wake_waiter(handler,
                                                   self.num_actual_workers)
     call_after_delay(delay, thunk)
     self.__join_phase.add_waiter(handler)
     return True
 def __schedule_grace_period_end(self, delay):
     """Schedule the end of the grace period for workers.  Once the grace
     period is over, if we have no workers, we will kill the job."""
     call_after_delay(delay, self.__close_grace_period)