非同期スクリプトの実行

Embedded R ExecutionのREST API関数エンドポイント・コールのデフォルト・モードは同期であるため、REST APIコールは追加のコールを実行する前に戻る必要があります。非同期モードでコールを実行すると、前のコールが戻るまで待たずに関数エンドポイントを起動できます。

次のステップに従って、スクリプト実行の非同期モードを使用します。

  1. asyncFlagtrueに設定してスクリプト実行関数をコールします。戻り値は、ジョブのステータスをポーリングするために使用できるジョブIDを含む場所です。
  2. ジョブのステータスを取得します。戻り値の202ステータス・コードは、ジョブが保留中であることを示します。302コードは、ジョブが終了したことを示します。ジョブが終了すると、戻り値にはContent-Locationヘッダーが含まれます。
  3. スクリプトの結果をフェッチします。

次に、非同期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":"IRIS", "groupBy":"Species", "parallelFlag":true}' \
"<oml-cloud-service-location-url>/oml/api/r-scripts/v1/group-apply/group.count"

出力には、ジョブが作成されたことを示すHTTP 201ステータス・コードと、ジョブ・ステータスおよび結果の取得に使用するジョブIDが含まれます。

次の結果では、ジョブが作成されています。

HTTP/1.1 201 Created
Date: Thu, 28 Jul 2022 21:04:18 GMT
Content-Type: application/json
Content-Length: 1820
Connection: keep-alive
Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1;mode=block
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options: nosniff
Content-Security-Policy: frame-ancestors 'none'
Location: https://<oml-cloud-service-location-url>/oml/api/r-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/r-scripts/v1/jobs/<job id>"

HTTPレスポンス・ステータス302は、ジョブが終了したことを示します。Content-Locationには結果の場所があります。

HTTP/1.1 302 Found
Date: Thu, 28 Jul 2022 21:04:18 GMT
Content-Type: application/json
Content-Length: 1820
Connection: keep-alive
Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1;mode=block
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options: nosniff
Content-Security-Policy: frame-ancestors 'none'
Content-Location: <oml-cloud-service-location-url>/oml/api/r-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/r-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":[{"Petal.Width":50,"Sepal.Length":50,"Sepal.Width":50,"Species":"setosa","Petal.Length":50,"Species.1":50},{"Petal.Width":50,"Sepal.Length":50,"Sepal.Width":50,"Species":"versicolor","Petal.Length":50,"Species.1":50},{"Petal.Width":50,"Sepal.Length":50,"Sepal.Width":50,"Species":"virginica","Petal.Length":50,"Species.1":50}]}

非同期モードでの長時間実行のタイムアウト・パラメータの調整

埋込みR実行関数エンドポイント・コールのREST APIのデフォルト・モードは同期であり、スクリプトは60秒後に自動的にタイムアウトします。実行時間が長いスクリプトの場合は、非同期モードを使用します。非同期モードでは、デフォルトのタイムアウトは1800秒です。タイムアウトを調整するには、タイムアウト・パラメータ(秒)を設定し、async_flag=trueを有効にします。次の例では、非同期表適用呼出しを使用し、タイムアウト・パラメータを7200秒に設定します。


curl -i -X POST --header "Authorization: Bearer <token>" \   --header 'Content-Type:
      application/json' \   --header 'Accept: application/json' \   -d '{"input":"tablename",
      "asyncFlag":true, "timeout":7200}' \        "<OML
      URL>/api/r-scripts/v1/table-apply/scriptname"