非同期スクリプトの実行
Embedded Python Execution関数エンドポイント・コールのREST APIのデフォルト・モードは同期であるため、追加のコールを実行する前にREST APIコールが戻る必要があります。非同期モードでコールを実行すると、前のコールが戻るまで待たずに関数エンドポイントを起動できます。
次のステップに従って、スクリプト実行の非同期モードを使用します。
asyncFlag
をtrue
に設定してスクリプト実行関数をコールします。戻り値は、ジョブのステータスをポーリングするために使用できるジョブIDを含む場所です。- ジョブのステータスを取得します。戻り値の202ステータス・コードは、ジョブが保留中であることを示します。302コードは、ジョブが終了したことを示します。ジョブが終了すると、戻り値にはContent-Locationヘッダーが含まれます。
- スクリプトの結果をフェッチします。
次に、非同期group-apply
コールを実行して結果をフェッチする例を示します。この例では、parallelFlag
引数をtrue
に設定して、データベースの並列性を使用します。
curl -i -X POST --header "Authorization: Bearer ${token}" \
--header 'Content-Type: application/json' --header 'Accept: application/json' \
-d '{"asyncFlag":true, "input":"select * from IRIS", "parameter":"{\"oml_input_type\":\"pandas.DataFrame\"}", "groupBy":"Species", "orderBy":"Sepal_Length", "parallelFlag":true}' \
"<oml-cloud-service-location-url>/oml/api/py-scripts/v1/group-apply/group_count"
出力には、ジョブが作成されたことを示すHTTP 201ステータス・コードと、ジョブ・ステータスおよび結果の取得に使用するジョブIDが含まれます。
次の結果では、ジョブが作成されています。
HTTP/1.1 201 Created
Date: Thu, 27 Aug 2020 15:14:04 GMT
Content-Length: 0
Connection: keep-alive
Cache-Control: no-cache, no-store, private
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1;mode=block
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options: nosniff
Set-Cookie: JSESSIONID=node01k14ak2rj75ug1gfbbze9gysl7710.node0; Path=/oml; Secure; HttpOnly
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Location: https://<oml-cloud-service-location-url>/oml/api/py-scripts/v1/jobs/<job id>;
ジョブ・ステータスをポーリングするには、GETメソッドを使用してジョブIDをcURLに渡します。
curl -i -X GET --header "Authorization: Bearer ${token}" \
--header 'Accept: application/json' \
"<oml-cloud-service-location-url>/oml/api/py-scripts/v1/jobs/<job id>"
「job is still running」
が表示されます。HTTP/2 202
date: Wed, 12 Mar 2025 23:09:20 GMT
content-type: application/json
content-length: 93
strict-transport-security: max-age=31536000; includeSubDomains
x-content-type-options: nosniff
cache-control: no-cache, no-store, must-revalidate
pragma: no-cache
x-frame-options: SAMEORIGIN
x-xss-protection: 1;mode=block
content-security-policy: default-src 'none'; connect-src 'self'; font-src 'self' static.oracle.com; img-src 'self' data: static.oracle.com; media-src 'none'; object-src 'none'; script-src 'self' static.oracle.com 'unsafe-inline' 'unsafe-eval'; style-src 'self' static.oracle.com 'unsafe-inline'; frame-ancestors 'none'
{"createdDate":" Mar 12,2025 22:55","status":"job is still running","elapsedTime":"00:13:32"}
HTTPレスポンス・ステータス302は、ジョブが終了したことを示します。Content-Locationには結果の場所があります。
HTTP/1.1 302 Found
Date: Thu, 27 Aug 2020 15:14:26 GMT
Content-Length: 0
Connection: keep-alive
Cache-Control: no-cache, no-store, private
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1;mode=block
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options: nosniff
Content-Location: https://<oml-cloud-service-location-url>/oml/api/py-scripts/v1/jobs/<job id>/result
結果を取得します。
curl -i -X GET --header "Authorization: Bearer ${token}" \
--header 'Accept: application/json' \
"<oml-cloud-service-location-url>/oml/api/py-scripts/v1/jobs/<job id>/result"
HTTP/1.1 200 OK
Date: Thu, 27 Aug 2020 15:16:32 GMT
Content-Type: application/json
Content-Length: 5045
Connection: keep-alive
Cache-Control: no-cache, no-store, private
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1;mode=block
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options: nosniff
結果の一部を次に示します。
{"result":{"versicolor_8":{"SEPAL_LENGTH":{"0":5.7},"SPECIES":{"0":"versicolor"},"COUNT":{"0":5}},
"versicolor_7":{"SEPAL_LENGTH":{"0":5.6},"SPECIES":{"0":"versicolor"},"COUNT":{"0":2}},
"virginica_20":{"SEPAL_LENGTH":{"0":6.7},"SPECIES":{"0":"virginica"},"COUNT":{"0":1}},...}}}
実行中のジョブを削除するには、DELETEメソッドを使用してジョブIDをcURLに渡します。
ノート:
ジョブIDを再度削除しようとすると、「Job <job id> status is FAILURE and not applicable to delete」
というメッセージが表示されます。
curl -i -k -X DELETE --header "Authorization: Bearer ${token}" --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{"service":"LOW"}' "<oml-cloud-service-location-url>/oml/api/py-scripts/v1/jobs/<job id>"
HTTPレスポンス・ステータス200は、リクエストが正常に実行されたことを示します。
HTTP/1.1 200 OK
Date: Mon, 10 Feb 2025 22:03:43 GMT
Content-Type: application/json
Content-Length: 112
Connection: keep-alive
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options: nosniff
Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1;mode=block
Content-Security-Policy: default-src 'none'; connect-src 'self'; font-src 'self' static.oracle.com; img-src 'self' data: static.oracle.com; media-src 'none'; object-src 'none'; script-src 'self' static.oracle.com 'unsafe-inline' 'unsafe-eval'; style-src 'self' static.oracle.com 'unsafe-inline'; frame-ancestors 'none'
{"Message":"Job <job id> sucessfully deleted container ending : LOW-1739224926687"}
非同期モードでの長時間実行のタイムアウト・パラメータの調整
Embedded Python Execution関数のREST APIエンドポイント・コールのデフォルト・モードは同期であり、スクリプトは60秒後に自動的にタイムアウトします。実行時間が長いスクリプトの場合は、非同期モードを使用します。非同期モードでは、デフォルトのタイムアウトは1800秒です。タイムアウトを調整するには、タイムアウト・パラメータ(秒)を設定し、async_flag=true
を有効にします。次の例では、非同期のtable-apply呼出しを使用し、タイムアウト・パラメータを7200秒に設定しています。
curl -i -X POST --header "Authorization: Bearer <token>" \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
-d '{"input":"select * from tablename", "parameters":"{\"oml_input_type\":\"pandas.DataFrame\"}", "asyncFlag":true, "timeout":7200}' \
"<OML URL>/api/py-scripts/v1/table-apply/scriptname"