Đã có một số câu hỏi tương tự, nhưng vấn đề của tôi không phải là "chạy nhiều chương trình song song" - có thể được thực hiện một cách trivially với parallel
hoặc xargs
.Làm thế nào để chạy hàm đã cho trong Bash song song?
Tôi cần song song các hàm Bash.
Hãy tưởng tượng mã như thế này:
for i in "${list[@]}"
do
for j in "${other[@]}"
do
# some processing in here - 20-30 lines of almost pure bash
done
done
Một số chế biến đòi hỏi các cuộc gọi đến các chương trình bên ngoài.
Tôi muốn chạy một số tác vụ (4-10), mỗi tác vụ chạy cho $i
khác nhau. Tổng số phần tử trong danh sách $ là> 500.
Tôi biết tôi có thể đặt toàn bộ vòng lặp for j ... done
trong tập lệnh bên ngoài và chỉ cần gọi chương trình này song song, nhưng có thể thực hiện mà không chia tách chức năng giữa hai chương trình riêng biệt ?
Thử sử dụng các hàm. Hoặc một cái gì đó như 'var1 = \' ls && pwd & & ls && pwd & \ '' bên trong vòng lặp của bạn. –
Vâng, nhưng tôi không muốn chạy * tất cả * lặp lại cùng một lúc. Tôi muốn có 4 quy trình công nhân đồng thời, và nếu có ai trong số họ hoàn thành - hãy bắt đầu một quy trình mới. Loại như: 'cat work_params | xargs -L1 -P4 do_bit_of_work' hoạt động. –
Hmmm ... 4 công nhân. Tôi đoán bạn sẽ phải thiết lập một số loại semaphores sau đó. Và bình chọn cho họ theo định kỳ. –