ฉันใช้xargs
โทรสคริปต์ไพ ธ อนเพื่อประมวลผลไฟล์ขนาดเล็กประมาณ 30 ล้านไฟล์ ฉันหวังว่าจะใช้xargs
เพื่อขนานกระบวนการ คำสั่งที่ฉันใช้คือ:
find ./data -name "*.json" -print0 |
xargs -0 -I{} -P 40 python Convert.py {} > log.txt
โดยทั่วไปConvert.py
จะอ่านในไฟล์jsonขนาดเล็ก(4kb) ทำการประมวลผลและเขียนไปยังไฟล์ 4kb อื่น ฉันกำลังทำงานบนเซิร์ฟเวอร์ที่มี 40 คอร์ CPU และไม่มีกระบวนการอื่นที่ใช้งาน CPU สูงบนเซิร์ฟเวอร์นี้
จากการตรวจสอบ htop (btw มีวิธีอื่นที่ดีในการตรวจสอบประสิทธิภาพของ CPU หรือไม่) ฉันพบว่า-P 40
ไม่เร็วเท่าที่ควร บางครั้งแกนทั้งหมดจะหยุดและลดลงจนเกือบเป็นศูนย์ประมาณ 3-4 วินาทีจากนั้นจะฟื้นตัวเป็น 60-70% จากนั้นฉันพยายามลดจำนวนกระบวนการแบบขนานเป็น-P 20-30
แต่ก็ยังไม่เร็วมาก พฤติกรรมในอุดมคติควรเป็นแบบความเร็วเชิงเส้น มีข้อเสนอแนะใด ๆ สำหรับการใช้ xargs แบบขนานหรือไม่
xargs -P
และ>
กำลังเปิดรับเงื่อนไขการแข่งขันเนื่องจากปัญหาครึ่งสายgnu.org/software/parallel/การใช้ GNU Parallel แทนจะไม่มีปัญหานั้น