C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: Powershellで非同期処理の方法


(過去ログ 138 を表示中)

[トピック内 2 記事 (1 - 2 表示)]  << 0 >>

■81440 / inTopicNo.1)  Powershellで非同期処理の方法
  
□投稿者/ リツコ (1回)-(2016/09/22(Thu) 14:06:09)

分類:[.NET 全般] 

PowerShellの並列?スレッド?非同期処理?の方法をお教えください。
下記のようなスクリプトを、作成しmyScript.ps1と名前を付けて保存をし実行しました。下記のコードは動くものとします。

doSomething1関数は少し重たい処理なので、doSomething1とdoSomething2を別々に行いたいと思っています。
doSomething1関数は10分、doSomething2関数が15分かかるとすると計25分時間がかかってしまいます。

時間がかかる為、非同期でdoSomething関数を実行したいと思います。

$path1 = c:\a.txt
$path2 = c:\b.txt

function doSomething1($path){

#テキスト・ファイルを加工する処理をする
}

function doSomething2($path){

#テキスト・ファイルを加工する処理をする
}

doSomething1 $path1
doSomething2 $path2

ネットで検索したところ、Start-Job -ScriptBlockというものを見つけました。そこで、

Start-Job -ScriptBlock {doSomething1 $path1} | Receive-Job
Start-Job -ScriptBlock {doSomething1 $path2} | Receive-Job

このように変更しても、非同期で処理されません。何か良い方法はあるでしょうか?よろしくお願いします。

引用返信 編集キー/
■81441 / inTopicNo.2)  Re[1]: Powershellで非同期処理の方法
□投稿者/ 魔界の仮面弁士 (910回)-(2016/09/22(Thu) 21:55:59)
No81440 (リツコ さん) に返信
> 時間がかかる為、非同期でdoSomething関数を実行したいと思います。

こんな感じで如何でしょう。


# サンプルコード

$init = {
  function doSomething1([int]$time) {
    [System.Threading.Thread]::Sleep($time)
    Write-Host "--> finish 1 at $(Get-Date)"
  }
  function doSomething2([int]$time) {
    [System.Threading.Thread]::Sleep($time)
    Write-Host "--> finish 2 at $(Get-Date)"
  }
}
"--> begin at $(Get-Date)"
$job1 = Start-Job -InitializationScript $init -ScriptBlock { doSomething1 15000 }
$job2 = Start-Job -InitializationScript $init -ScriptBlock { doSomething2 45000 }
"--> waiting at $(Get-Date)"
Wait-Job $job1, $job2
"--> waited at $(Get-Date)"
Receive-Job $job1, $job2
"--> end at $(Get-Date)"
Get-Job | Remove-Job

<# 実行結果

--> begin at 09/22/2016 21:54:00
--> waiting at 09/22/2016 21:54:00

Id     Name            PSJobTypeName   State         HasMoreData     Location             Command                  
--     ----            -------------   -----         -----------     --------             -------                  
25     Job25           BackgroundJob   Completed     True            localhost             doSomething1 15000      
27     Job27           BackgroundJob   Completed     True            localhost             doSomething2 45000      
--> waited at 09/22/2016 21:54:46
--> finish 1 at 09/22/2016 21:54:16
--> finish 2 at 09/22/2016 21:54:46
--> end at 09/22/2016 21:54:46

#>

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -