Làm cách nào tôi có thể lấy chỉ mục của bộ xử lý song song xargs


14

Giả sử tôi có hai tài nguyên, được đặt tên 01, chỉ có thể được truy cập riêng.

Có cách nào để khôi phục "chỉ mục" của "bộ xử lý song song" xargskhởi chạy để sử dụng nó như một dịch vụ loại trừ lẫn nhau miễn phí không? Ví dụ, hãy xem xét tính toán song song sau đây:

$ echo {1..8} | xargs -d " " -P 2 -I {} echo "consuming task {}"
consuming task 1
consuming task 2
consuming task 3
consuming task 4
consuming task 5
consuming task 6
consuming task 7
consuming task 8

Câu hỏi của tôi là liệu có tồn tại một từ ma thuật, giả sử index, nơi đầu ra sẽ trông như thế nào

$ echo {1..8} | xargs -d " " -P 2 -I {} echo "consuming task {} with resource index"
consuming task 1 with resource 0
consuming task 2 with resource 1
consuming task 3 with resource 1
consuming task 4 with resource 1
consuming task 5 with resource 0
consuming task 6 with resource 1
consuming task 7 with resource 0
consuming task 8 with resource 0

trong đó đảm bảo duy nhất là chỉ có tối đa một quy trình sử dụng tài nguyên 0và tương tự cho 1. Về cơ bản, tôi muốn truyền đạt chỉ số này xuống quy trình con sẽ tôn trọng quy tắc chỉ sử dụng tài nguyên mà nó được yêu cầu.

Tất nhiên, tốt hơn là nên mở rộng tài nguyên này đến hơn hai tài nguyên. Kiểm tra các tài liệu, xargscó lẽ không thể làm điều này. Có một giải pháp tương đương tối thiểu? Sử dụng / làm sạch các tập tin như khóa giả là không thích hợp.

Câu trả lời:


18

Nếu bạn đang sử dụng GNU xargs , có --process-slot-var:

--process-slot-var= tên
biến môi trường Đặt tên biến môi trường biến tên môi trường thành một giá trị duy nhất trong mỗi tiến trình con đang chạy. Mỗi giá trị là một số nguyên thập phân. Các giá trị được sử dụng lại khi quá trình con thoát ra. Điều này có thể được sử dụng trong sơ đồ phân phối tải thô sơ, ví dụ.

Ví dụ:

~ echo {1..9} | xargs -n2 -P2 --process-slot-var=index sh -c 'echo "$index" "$@" "$$"' _
0 1 2 10475
1 3 4 10476
1 5 6 10477
0 7 8 10478
1 9 10479
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.