SQL görevi gibi bir görev, MaxCompute içindeki temel hesaplama birimidir. Bu konuda, PyODPS'teki görev örnekleri için temel işlemler açıklanmaktadır.
Temel işlemler
Bir görev çalıştırıldığında, bir MaxCompute örneği olarak somutlaşır; bu yapı kısaca örnek olarak da adlandırılır. Örnekler için yaygın kullanılan işlemler şunlardır:
list_instances(): Bir projedeki tüm örnekleri getirir.exist_instance(): Bir örneğin var olup olmadığını kontrol eder.get_instance(): Bir örnek getirir.-
stop_instance(): Bir örneği durdurur. Yalnızca çalışan örnekleri durdurabilirsiniz. Başka bir durumda olan bir örneği durdurmaya çalışırsanız hata alırsınız.NotBir Instance nesnesinde
stopyöntemini çağırmak da örneği durdurur. Örneğin:o.get_instance('instance id').stop.
Örnekler
-
Bir örneğin ID değerini getirin
for instance in o.list_instances(): print(instance.id) -
Bir örneğin var olup olmadığını kontrol edin
print(o.exist_instance('my_instance_id'))
Logview adresini alın
-
SQL görevleri gibi görevler için, bir Instance nesnesinde
get_logview_addressyöntemini çağırarak Logview adresini getirebilirsiniz.# 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()) -
PAI görevleri için önce alt görevleri listeleyebilir, ardından her bir alt görev için Logview adresini getirebilirsiniz.
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()))
Görev örneği durumu
Bir örneğin durumu Running, Suspended veya Terminated olabilir. Aşağıdaki yöntemler örnek durumu ile ilgilidir:
status: Durumu getirmek için kullanılan bir özellik.is_terminated: Örneğin çalışmayı tamamladığını belirtir.is_successful: Örneğin başarıyla çalıştığını belirtir. Görev çalışıyor veya başarısız olduysa False döner.
Aşağıdaki kodda örnekler sunulmaktadır.
-
Bir örneğin durumunu getirin.
instance=o.get_instance('my_instance_id') print(instance.status) print(instance.status.value)Örnek dönüş değerleri:
Status.TERMINATED Terminated -
Mevcut örneğin çalışmayı tamamladığını kontrol edin.
instance=o.get_instance('my_instance_id') from odps.models import Instance print(instance.status == Instance.Status.TERMINATED)Truedönüş değeri, örneğin çalışmayı tamamladığını gösterir.
wait_for_completion yöntemini çağırmak, işlem örneği çalışmayı bitirene kadar engeller. wait_for_success yöntemi de işlemi engeller ancak görev başarısız olursa bir özel durum oluşturur.
Alt görev işlemleri
Bir örnek, çalışma zamanında bir veya daha fazla alt görev içerebilir. Bu alt görevlere ayrıca görev denir. Bu Task yapısının, MaxCompute içindeki temel hesaplama biriminden farklı olduğunu unutmayın. Bu görevler için aşağıdaki yöntemler kullanılabilir:
-
get_task_names: Tüm alt görevlerin adlarını getirir. Bu yöntem, adlardan oluşan bir liste döndürür.instance=o.get_instance('my_instance_id') instance.get_task_names()Örnek dönüş değeri:
['jdbc_sql_task'] -
get_task_result: Belirtilen bir görevin yürütme sonucunu getirir. Bu yöntem, her bir görevin yürütme sonucunu bir sözlük olarak döndürür. Aşağıdaki kodda örnekler sunulmaktadır:-
Alt görev adını getirin.
instance=o.execute_sql('select*frompyodps_irislimit1') print(instance.get_task_names())Örnek dönüş değeri:
['AnonymousSQLTask'] -
Alt görev yürütme sonucunu getirin.
print(instance.get_task_result('AnonymousSQLTask'))Örnek dönüş değeri:
"sepallength","sepalwidth","petallength","petalwidth","name" 4.9,3.0,1.4,0.2,"Iris-setosa" -
Alt görev sonuçlarını getirin.
print(instance.get_task_results())Örnek dönüş değeri:
OrderedDict([('AnonymousSQLTask', '"sepallength","sepalwidth","petallength","petalwidth","name"\n4.9,3.0,1.4,0.2,"Iris-setosa"\n')])
-
-
get_task_progress: Örnek çalışırken bir görevin mevcut ilerleme durumunu getirir.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)Örnek dönüş değeri:
20160519101349613gzbzufck2 2016-05-19 18:14:03 M1_Stg1_job0:0/1/1[100%]