ฉันจะรับดัชนีของ "หน่วยประมวลผลแบบขนาน" xargs ได้อย่างไร?


14

สมมติว่าฉันมีสองทรัพยากรชื่อ0และ1ที่สามารถเข้าถึงได้เท่านั้น

มีวิธีใดในการกู้คืน "ดัชนี" ของ "ตัวประมวลผลแบบขนาน" ที่xargsเปิดตัวเพื่อใช้เป็นบริการการยกเว้นซึ่งกันและกันฟรี เช่นพิจารณาการคำนวณแบบขนานต่อไปนี้:

$ 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

คำถามของฉันคือว่ามีคำวิเศษพูดว่าindexที่ผลลัพธ์จะมีลักษณะ

$ 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

ที่รับประกันเพียงอย่างเดียวคือว่ามีเพียงที่เคยกระบวนการหนึ่งมากที่สุดโดยใช้ทรัพยากรและเหมือนกันสำหรับ0 1โดยทั่วไปฉันต้องการสื่อสารดัชนีนี้ลงในกระบวนการลูกที่เคารพกฎเพื่อใช้ทรัพยากรที่ได้รับคำสั่งเท่านั้น

แน่นอนว่ามันจะดีกว่าถ้าจะขยายให้มากกว่าสองทรัพยากร การตรวจสอบเอกสารxargsอาจทำไม่ได้ มีวิธีแก้ปัญหาที่เทียบเท่าน้อยที่สุดหรือไม่? ไม่แนะนำให้ใช้ / ล้างไฟล์เนื่องจากการล็อคปลอม

คำตอบ:


19

หากคุณใช้GNU xargsมี--process-slot-var:

--process-slot-var= environment-variable-name
ตั้งค่าตัวแปรสภาพแวดล้อม environment-variable-nameเป็นค่าที่ไม่ซ้ำกันในกระบวนการลูกที่กำลังทำงานอยู่ แต่ละค่าเป็นเลขจำนวนเต็มฐานสิบ ค่าจะถูกนำมาใช้ใหม่เมื่อกระบวนการลูกออกจากการทำงาน ซึ่งสามารถใช้ในรูปแบบการกระจายโหลดพื้นฐานเช่น

ตัวอย่างเช่น:

~ 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.