PowerShell é seu amigo.
link pergunta algo semelhante .
"Rápido" e "robusto" são obviamente subjetivos.
Eu preciso processar > 50.000 arquivos usando um aplicativo de linha de comando .exe de terceiros. O aplicativo usa apenas um arquivo de entrada de cada vez, por isso preciso iniciar o aplicativo > 50.000 vezes.
Cada arquivo (cada trabalho) geralmente leva cerca de um segundo. No entanto, às vezes, o aplicativo trava indefinidamente.
Eu escrevi um script de shell do Windows que executa todos os trabalhos em série e verifica cada segundo para ver se o trabalho está concluído. Após 10 segundos, ele mata o trabalho e passa para o próximo. No entanto, demora cerca de 20 horas. Acredito que posso diminuir o tempo de execução total em grande quantidade, se eu executar vários trabalhos em paralelo. A questão é como?
No CMD, inicio a tarefa com Iniciar, mas não há uma maneira simples de recuperar a ID do processo (PID) e, portanto, não consigo controlar com facilidade qual instância foi executada por quanto tempo. Eu sinto que estou tentando reinventar o guarda-chuva. Alguma sugestão?
PowerShell é seu amigo.
link pergunta algo semelhante .
"Rápido" e "robusto" são obviamente subjetivos.
Powershell fez o truque, como indicado na resposta quadruplebucky. Aqui está o código que usei. A segunda e última linha ( ./xml2csv...
) é o trabalho em si. O restante do script pode ser reutilizado para tarefas semelhantes.
# PARAMETERS
$root = 'D:\Ratings'
$folder = 'SP'
# Import Invoke-Parallel
.".\Invoke-Parallel.ps1"
# Run in parallel
Get-ChildItem ".\$folder-xml" -Filter *.xml |
Invoke-Parallel -throttle 10 -runspaceTimeout 10 -ImportVariables '
-ScriptBlock {
$file = $_.BaseName
echo $file
cd $root
(./xml2csv $folder-xml\$file.xml $folder-csv\$file.csv fields-$folder.txt -Q) | out-null
}
Algumas notas:
-runspaceTimeout
fornece o tempo máximo de execução para cada instância. -throttle
define o número máximo de instâncias em execução simultâneas.