複数キューでの実行ParallelクラスとTaskクラスソース指定ディレクトリにあるプログラム群を並列実行するコマンド2016年06月22日バッチファイル名に‟&”が含まれていると実行ができなかったのを修正。4.5.2の環境下で動作を確認しています。練習がてらここのソースをGitHubにもあげてみました。https://github.com/k896951/Parallelrunよくわからなくて泣きそうになった。2016-06-22版。4.5.2で実行できることを確認。スレッドで並列実行するコマンドです。指定ディレクトリにある実行ファイルのパスはキュー(FIFO)に格納され、指定数生成された各スレッドがこのキューから実行ファイルのパスを取り出して実行していきます。各スレッドがキューから実行ファイルのパスを読み出せなくなったら終了となります。folder.H:\JOB>以下は実行例です。H:\JOBにPARARUN.EXEがあり、H:\JOB\job1、H:\JOB\job2、H:\JOB\job3、のディレクトリがあります。jobs.H:\JOB>時刻はローカルタイムです。s0~1がsキュー、f0~1がfキュー、h0がhキューの処理に使われているスレッドのスレッド名です。各スレッドで実行中の処理時間が5分以上かかっている場合、‟LongRun”のメッセージが出ます。形でログに出力しています。empty.”のメッセージが出ると全ての実行ファイルが実行されたことになります。単一キューでの実行sキューはデフォルトのキューで必ず使用されます。オプションが全く指定されていない場合、sキューに実行ファイルのパスが格納され4スレッドで実行が行われます。格納sキューの実行ファイルを4並列(4スレッド)で実行を意味します。指定するディレクトリ名の最後に‟¥”をつけないでください。格納sキューの実行ファイルを6並列(6スレッド)で実行を意味します。複数キューでの実行キューは3つまで利用できます。格納sキューを8並列(8スレッド)で実行fキューを3並列(3スレッド)で実行hキューを1並列(1スレッド)で実行を意味します。各キューで使ったスレッドはすぐに破棄せず、他のキューの処理に使用されます。sキューの内容が全て実行されたのち、まだfキューに処理されていない実行ファイルがあると、sキューで使っていたスレッドをfキューの処理に使用します。hキューに処理されていない実行ファイルがあると、sキューで使っていたスレッドをhキューの処理に使用します。fキューの内容が全て実行されたのち、まだsキューに処理されていない実行ファイルがあると、fキューで使っていたスレッドをsキューの処理に使用します。hキューに処理されていない実行ファイルがあると、fキューで使っていたスレッドをhキューの処理に使用します。hキューの内容が全て実行されたのち、まだsキューに処理されていない実行ファイルがあると、hキューで使っていたスレッドをsキューの処理に使用します。fキューに処理されていない実行ファイルがあると、hキューで使っていたスレッドをfキューの処理に使用します。ParallelクラスとTaskクラスActionクラスで定義したラムダ式の処理を、デフォルトではParallel.Invoke()で実行します。オプションを指定すると個々のスレッド処理をTask.Start()で起動しTask.WaitAll()で終了待ちします。ソース表示等が気に入らない場合はソースを修正し再コンパイルを行ってください。コンパイルコマンドラインをコピペしておきます。Frameworkのバージョンによってcsc.exeのパスが違うと思うので適宜書き換えを。Pararun.cs以下はPARARUN.EXEのソースコードです。k896951ページ用ツール文書の先頭へ。