2017-06-28 5 views

Répondre

1

Il n'y a pas de fonction intégrée dans Boto3. Mais vous pouvez écrire votre propre serveur.

Voir: describe_step

Appel describe_step avec cluster_id et step_id. La réponse est un dictionnaire qui contient des détails sur l'étape. L'une des clés est «État» qui contient des informations sur l'état de l'étape. Si l'état n'est pas TERMINÉ, attendez quelques secondes pour réessayer jusqu'à ce qu'il soit TERMINE ou que le temps d'attente dépasse votre limite.

'State': 'PENDING'|'CANCEL_PENDING'|'RUNNING'|'COMPLETED'|'CANCELLED'|'FAILED'|'INTERRUPTED' 
0

je suis venu avec le code suivant (si vous définissez max_attempts-0 ou moins il sera tout simplement attendre jusqu'à ce qu'il n'y aura pas d'étapes en cours/en attente):

def wait_for_steps_completion(emr_client, emr_cluster_id, max_attempts=0): 
    sleep_seconds = 30 
    num_attempts = 0 

    while True: 
     response = emr_client.list_steps(
      ClusterId=emr_cluster_id, 
      StepStates=['PENDING', 'CANCEL_PENDING', 'RUNNING'] 
     ) 
     num_attempts += 1 
     active_aws_emr_steps = response['Steps'] 

     if active_aws_emr_steps: 
      if 0 < max_attempts <= num_attempts: 
       raise Exception(
        'Max attempts exceeded while waiting for AWS EMR steps completion. Last response:\n' 
        + json.dumps(response, indent=3, default=str) 
       ) 
      time.sleep(sleep_seconds) 
     else: 
      return