HTTPリクエスト及びWebサービス内の処理を並列実行する場合の注意点と方法

更新しました Apr 17, 2024

環境

ソフトウェア

  • LabVIEW

LabVIEWを使用してWebサービスを作成し、NI Webサーバを使用してWebサーバをPCでホストすると、インターネット等で同じネットワークとして接続されているPCからHTTPメソッドを使用する事でクライアントPCが指示した内容をサーバPC上で処理する事ができます。

Webサービスにおいてある処理を行うプログラムを並列で呼び出し、処理速度を向上させたい場合、Webサービス内でサブVIを非同期呼び出しする必要があります。

ここではWebサービスの並列実行に必要なプログラミング手法を確認します。例としてWebサービスがホストしている複数Web VIへ同時に複数HTTPリクエストを送信する際、それらのHTTPリクエストが並列で処理するためのプログラミング手法を紹介いたします。なお、同じWebサービスのWeb VIを複数HTTPリクエストで同時に呼び出したい場合、この資料を確認してください。
 

Webサービス、Webアプリケーションの作成方法の基礎についてはこちらの資料で確認できます。

ここではWebサービスにおいて、下記の様にサブVIを呼び出します。このサブVIでは簡単な配列処理を行うとともに指定した時間の待機を行い、またVIの実行開始時間と終了時間を出力します。
 
Parallel.png

このサブVIを含むPOSTリクエスト(Parallel.vi)をクライアントPCから複数回並列で呼び出すと、実行は同時に処理されず、逐次処理されて行きます。Parallel.viのPOSTリクエストの内容を複数回同時に呼び出し・実行する必要がある場合、同じ内容のPOSTリクエストを複数個作成します。この時、各POSTリクエスト内で使用するサブVIは同じもので構いません。

上記のようにParallel.vi, Parallel2.vi, Parallel3.viの3つのPOSTリクエストを作成し、それらを下記のように同時に実行すると、想定通りの動作をすることが確認できます。

ParallelExecution.png

赤、緑、青はそれぞれParallel.vi, Parallel2.vi, Parallel3.viに対してPOSTリクエストを行っており、それぞれ2秒、3秒、4秒の待機時間を指定しています。これらの処理の開始時刻は21:02:50とほぼ同じ時刻となっており、終了時刻はそれぞれ指定した待機時間経過後となっています。

一方、各POSTリクエスト内であるサブVIを複数回呼び出すもしくは並列実行モードのForループを使用して処理の高速化を行う場合、下記の様にPOSTリクエスト内でサブVIを呼び出し、そのサブVI内でVIの非同期呼び出しを行う必要があります。
 
asynccall.png


Webサービス作成時にVIの非同期呼び出し、並列実行を行う必要がある場合、目的に応じて上記のようなプログラミングが必要となります。