apakah Anda tahu jika ada cara sederhana untuk menjalankan perintah FOR dalam file batch pada banyak utas? Apa gunanya memiliki 4 core jika saya tidak dapat menjalankan tugas saya dalam 4 utas paralel?
Misalnya, jika saya mengoptimalkan PNG dengan PNGOUT, perintah yang akan saya gunakan adalah
for %i in (*.png) do pngout "%i"
Tetapi ini adalah tugas yang sangat dapat dipisah-pisahkan di mana sub-tugas tidak saling bergantung sama sekali.
Untuk menjalankan ini dalam 4 'antrian' saya akan menulis sesuatu seperti
for -thread 4 %i in (*.png) do pngout "%i"
Apakah saya perlu menulis aplikasi seperti untuk saya sendiri yang dapat melakukan ini atau apakah ada solusi gratis yang tersedia?
batch
automation
Axarydax
sumber
sumber
Jawaban:
Saya telah menulis file batch yang hanya mengeksekusi jumlah maksimum perintah beberapa saat yang lalu di Stack Overflow: Eksekusi paralel dari proses shell :
sumber
find /c /v ""
.File batch adalah untuk skrip yang sangat dasar dan tidak mendukung segala jenis multithreading. Anda perlu menulis utilitas Anda sendiri untuk melakukan apa yang ingin Anda capai.
Atau, Windows PowerShell dapat memberikan lebih banyak kemampuan untuk membuat Anda lebih dekat ke tujuan Anda.
Jika Anda hanya ingin menjalankan beberapa operasi secara bersamaan, Anda dapat menggunakan perintah mulai untuk meluncurkan utilitas PNGOUT di jendela baru. Loop FOR akan terus berlanjut tanpa menunggu setiap operasi selesai.
Baris yang diubah akan terlihat seperti ini:
Namun, perhatikan bahwa ini akan secara efektif meluncurkan PNGOUT untuk SEMUA file di direktori pada saat yang sama, yang kemungkinan besar tidak diinginkan.
sumber