multithreading - Powershell multithread and oracle procedure -
i have list of files increase 5 within 1 minutes never end. inserting data database using oracle procedure. (method external table)
then calling procedure powershell below.
foreach ($file in $files) { #executing calculate procedure executestoredprocedure -value sp_load_table_crm -filename $file.name -conn }
this works okay. takes long time , wanted speed up. better use multithreading or multiprocessing ? planning set powershell script on windows task scheduler.
you use runspaces. try this:
$files = @('file1','file2','file3') #list of files $throttle = 10 #number of threads $runspacepool = [runspacefactory]::createrunspacepool(1, $throttle) $runspacepool.open() $jobs = @() $scriptblock = { param($file) #place executestoredprocedure function inside script block or make sure loaded appropriate module via profile executestoredprocedure -value sp_load_table_crm -filename ($file.name) -conn #heres function , parameters } $files | % { $file = $_ $job = [powershell]::create().addscript($scriptblock).addargument($file) $job.runspacepool = $runspacepool $jobs += new-object psobject -property @{ pipe = $job result = $job.begininvoke() } } write-host "waiting.." -nonewline { write-host "." -nonewline start-sleep -seconds 1 } while ( $jobs.result.iscompleted -contains $false) write-host "all jobs completed!" $results = @() foreach ($job in $jobs) { $results += $job.pipe.endinvoke($job.result) } $results | ft -wrap -autosize
Comments
Post a Comment