スクリプトに実行タイムアウトを設定したい
キーワード:スレッド,繰り返し,待機,実行タイムアウト,プロセスタイムアウト
シナリオ一覧に戻る
概要
スクリプトに実行タイムアウトを設定したい場合、スレッド処理と待機処理を使用します。
スレッド処理と待機処理を使用して実行タイムアウトを行います。
以下、本シナリオでは実行タイムアウトの対象となる一連のフローを「メイン処理」、実行タイムアウトの実装部分を「実行タイムアウト処理」と呼びます。
- CSVファイル読み取り処理がメイン処理となります。
- 繰り返し処理から条件分岐処理までが実行タイムアウト処理となります。
実行タイムアウト処理は一定間隔でメイン処理の状況を確認し、一定時間内にメイン処理が終了しない場合、タイムアウトエラーとします。
実行タイムアウトまでの時間は「待機処理時間×繰り返し回数」となります。たとえば、待機処理を5秒、繰り返し回数を12回とした場合、5秒×12回=60秒となります。
処理の流れ
サンプルプロジェクトの処理の流れは以下の通りです。
- 「スレッド処理」によって、メイン処理と実行タイムアウト処理を並列で実行します。
- メイン処理では、「CSVファイル読み取り処理」でファイルを読み取り、読み取り終了後、スクリプト変数「終了フラグ」に「true」を設定します。
- 実行タイムアウト処理では「繰り返し処理」で指定回数分、以下の処理を繰り返します。
- 「待機処理」で一定時間待機します。
- 「条件分岐処理」でメイン処理の実行状況を判定し、終了している場合、繰り返し処理を抜け出します。
- 「繰り返し処理」終了後、「条件分岐処理」でメイン処理の実行状況を判定し、終了していない場合、「例外通知処理」で処理を異常終了させます。
実行結果のイメージについて
- 実行タイムアウトが発生した場合は、以下のダイアログが表示されて異常終了します。
ポイントとなる機能
名前 |
説明 |
ツールパレット上の場所 |
スレッド処理 |
スレッド開始アイコンからスレッド終了アイコンまでの間の処理をスレッドで実行します。 |
「基本」-「フロー」-「スレッド」 |
繰り返し処理 |
指定した回数分、処理を繰り返します。 |
「基本」-「フロー」-「繰り返し」 |
待機処理 |
指定された時間、待機します。 |
「変換」-「処理」-「待機」 |
処理のポイント
スレッド処理のスレッド開始アイコンは複数のアイコンにプロセスフローを引くことができます。スレッド開始アイコンからプロセスフローを引かれた処理は、すべて並列で実行されます。
メイン処理が終了した場合にはタイムアウト処理も終了させるため、繰り返し処理によって一定間隔でメイン処理の実行状況を確認します。
サンプルプロジェクトの使用方法
上記処理を実装したサンプルプロジェクトを用意しています。サンプルプロジェクトを使用する場合の手順は、以下の通りです。
サンプルプロジェクトファイル名 |
rl_reference_094.zip |
- サンプルプロジェクトの展開
サンプルプロジェクトファイル「rl_reference_094.zip」を展開します。
- プロジェクトのアップロード
「rl_reference_094.zip」を展開後に作成される「rl_reference_094プロジェクト」ディレクトリがプロジェクトファイルとなります。
DataSpider Studioを起動し、マイプロジェクトの画面から[ファイル]-[ローカルからアップロード]で展開したディレクトリ「rl_reference_094プロジェクト」をアップロードしてください。
- サンプルデータの準備
「rl_reference_094.zip」を展開後に作成される「samples」ディレクトリがサンプルデータとなります。
$DATASPIDER_HOME/server/samplesディレクトリに上書きしてください。
スクリプトの作成手順
プロセスフローは、「サンプルプロジェクトの説明」のスクリプト画像を参照して適宜設定してください。
- 実行タイムアウト設定として使用するスクリプト変数を作成します。
- スクリプト変数のプロパティは、以下のように設定します。
スクリプト変数のプロパティ
変数名 |
変数型 |
初期値 |
繰り返し回数 |
整数型 |
12 |
終了フラグ |
真偽値 |
false |
- デザイナのツールパレット「基本」-「フロー」-「スレッド」から、スレッド処理をスクリプトキャンバスに配置します。
- デザイナのツールパレット「ファイル」-「CSV」-「CSVファイル読み取り」から、CSVファイル読み取り処理をスクリプトキャンバスに配置します。
- CSVファイル読み取り処理の設定は、以下のように行います。
[必須設定]タブ
- デザイナのツールパレット「基本」-「処理」-「変数代入」から、変数代入処理をスクリプトキャンバスに配置します。
- 変数代入処理のMapperエディタを開き、スクリプト変数に「true」を代入します。
- マッピングキャンバスは、以下のように設定します。
マッピングキャンバス
番号 |
ロジック名 |
説明 |
ツールパレット上の場所 |
(1) |
真偽値定数 |
真偽定数を出力します。
[必須設定]タブの[定数]には「true」と入力します。 |
「条件」-「真偽」-「真偽値定数」 |
- デザイナのツールパレット「基本」-「フロー」-「繰り返し」から、繰り返し処理をスクリプトキャンバスに配置します。
- 繰り返し処理の設定は、以下のように行います。
[必須設定]タブ
処理のポイント
- [繰り返し回数]にスクリプト変数を使用することで、スクリプトを改修せずに動的に設定値を変更することができます。
スクリプト変数は、以下の方法で素早く入力できます。
- 入力フィールドにフォーカスをあてて表示させる変数入力アシスタント機能から選択します。
- 入力フィールドの右クリックメニューで[スクリプト変数]を選択します。
|
- デザイナのツールパレット「基本」-「フロー」-「条件分岐」から、条件分岐処理をスクリプトキャンバスに配置します。
- 条件の設定は、以下のように行います。
[必須設定]タブ
- デザイナのツールパレット「基本」-「フロー」-「break」から、break処理をスクリプトキャンバスに配置します。
- break処理のプロパティはありません。
処理のポイント
- メイン処理が終了した場合にはタイムアウト処理も終了させるため、break処理を使用します。
|
- デザイナのツールパレット「基本」-「処理」-「待機」から、待機処理をスクリプトキャンバスに配置します。
- 待機処理の設定は、以下のように行います。
[必須設定]タブ
- デザイナのツールパレット「基本」-「フロー」-「条件分岐」から、条件分岐処理をスクリプトキャンバスに配置します。
- 条件の設定は、以下のように行います。
[必須設定]タブ
- デザイナのツールパレット「基本」-「処理」-「例外通知」から、例外通知処理をスクリプトキャンバスに配置します。
- 例外通知処理の設定は、以下のように行います。
[必須設定]タブ
- スクリプトを実行し、以下の結果になれば成功です。
- メイン処理が1分以内に終了した場合、正常終了します。
- メイン処理が1分以内に終了しない場合、実行タイムアウトエラーが発生し異常終了します。