Une tâche, telle qu'une tâche SQL, constitue l'unité de calcul de base dans MaxCompute. Cette rubrique décrit les opérations de base sur les instances de tâche dans PyODPS.
Opérations de base
Lorsqu'une tâche s'exécute, elle est instanciée sous la forme d'une instance MaxCompute, également appelée instance. Voici les opérations courantes applicables aux instances :
list_instances(): Récupère toutes les instances d'un projet.exist_instance(): Vérifie si une instance existe.get_instance(): Récupère une instance.-
stop_instance(): Arrête une instance. Vous ne pouvez arrêter que les instances en cours d'exécution. Une erreur survient si vous tentez d'arrêter une instance dans un autre état.RemarqueL'appel de la méthode
stopsur un objet Instance arrête également l'instance. Par exemple :o.get_instance('instance id').stop.
Exemples
-
Récupération de l'ID d'une instance
for instance in o.list_instances(): print(instance.id) -
Vérification de l'existence d'une instance
print(o.exist_instance('my_instance_id'))
Obtention de l'adresse Logview
-
Pour les tâches telles que les tâches SQL, appelez la méthode
get_logview_addresssur un objet Instance afin de récupérer l'adresse Logview.# Get the Logview address from an existing instance object. instance = o.run_sql('desc pyodps_iris') print(instance.get_logview_address()) # Get the Logview address from an instance ID. instance = o.get_instance('my_instance_id') print(instance.get_logview_address()) -
Pour les tâches PAI, énumérez d'abord les sous-tâches, puis récupérez l'adresse Logview pour chacune d'elles.
instance = o.run_xflow('AppendID', 'algo_public', {'inputTableName': 'input_table', 'outputTableName': 'output_table'}) for sub_inst_name, sub_inst in o.get_xflow_sub_instances(instance).items(): print('%s: %s' % (sub_inst_name, sub_inst.get_logview_address()))
État des instances de tâche
L'état d'une instance peut être Running, Suspended ou Terminated. Les méthodes suivantes concernent l'état de l'instance :
status: Propriété permettant de récupérer l'état.is_terminated: Indique si l'instance a terminé son exécution.is_successful: Indique si l'instance s'est exécutée avec succès. Elle renvoie False si la tâche est en cours d'exécution ou a échoué.
Le code suivant illustre ces opérations.
-
Récupération de l'état d'une instance.
instance=o.get_instance('my_instance_id') print(instance.status) print(instance.status.value)Exemples de valeurs de retour :
Status.TERMINATED Terminated -
Vérification de la fin d'exécution de l'instance actuelle.
instance=o.get_instance('my_instance_id') from odps.models import Instance print(instance.status == Instance.Status.TERMINATED)Une valeur de retour égale à
Trueindique que l'instance a terminé son exécution.
L'appel de la méthode wait_for_completion bloque le processus jusqu'à ce que l'instance termine son exécution. La méthode wait_for_success bloque également le processus, mais lève une exception si la tâche échoue.
Opérations sur les sous-tâches
Une instance peut contenir une ou plusieurs sous-tâches lors de l'exécution. Ces sous-tâches sont également appelées tâches. Notez que cette Task diffère de l'unité de calcul de base dans MaxCompute. Les méthodes suivantes sont disponibles pour ces tâches :
-
get_task_names: Récupère les noms de toutes les sous-tâches. Cette méthode renvoie une liste des noms.instance=o.get_instance('my_instance_id') instance.get_task_names()Exemple de valeur de retour :
['jdbc_sql_task'] -
get_task_result: Récupère le résultat d'exécution d'une tâche spécifiée. Cette méthode renvoie le résultat d'exécution de chaque tâche sous forme de dictionnaire. Le code suivant illustre cette opération :-
Récupération du nom de la sous-tâche.
instance=o.execute_sql('select*frompyodps_irislimit1') print(instance.get_task_names())Exemple de valeur de retour :
['AnonymousSQLTask'] -
Récupération du résultat d'exécution de la sous-tâche.
print(instance.get_task_result('AnonymousSQLTask'))Exemple de valeur de retour :
"sepallength","sepalwidth","petallength","petalwidth","name" 4.9,3.0,1.4,0.2,"Iris-setosa" -
Récupération des résultats des sous-tâches.
print(instance.get_task_results())Exemple de valeur de retour :
OrderedDict([('AnonymousSQLTask', '"sepallength","sepalwidth","petallength","petalwidth","name"\n4.9,3.0,1.4,0.2,"Iris-setosa"\n')])
-
-
get_task_progress: Récupère la progression actuelle d'une tâche pendant l'exécution de l'instance.instance=o.get_instance('20160519101349613gzbzufck2') while not instance.is_terminated(): for task_name in instance.get_task_names(): print(instance.id, instance.get_task_progress(task_name).get_stage_progress_formatted_string()) time.sleep(10)Exemple de valeur de retour :
20160519101349613gzbzufck2 2016-05-19 18:14:03 M1_Stg1_job0:0/1/1[100%]