Tôi đang sử dụng xargs
để gọi một kịch bản python để xử lý khoảng 30 triệu tệp nhỏ. Tôi hy vọng sẽ sử dụng xargs
để song song hóa quá trình. Lệnh tôi đang sử dụng là:
find ./data -name "*.json" -print0 |
xargs -0 -I{} -P 40 python Convert.py {} > log.txt
Về cơ bản, Convert.py
sẽ đọc trong một tệp json nhỏ (4kb), thực hiện một số xử lý và ghi vào một tệp 4kb khác. Tôi đang chạy trên một máy chủ với 40 lõi CPU. Và không có quá trình cường độ CPU nào khác đang chạy trên máy chủ này.
Bằng cách theo dõi htop (btw, có cách nào khác tốt để theo dõi hiệu suất CPU không?), Tôi thấy điều đó -P 40
không nhanh như mong đợi. Đôi khi tất cả các lõi sẽ đóng băng và giảm gần như bằng 0 trong 3-4 giây, sau đó sẽ phục hồi đến 60-70%. Sau đó, tôi cố gắng giảm số lượng các quá trình song song xuống -P 20-30
, nhưng nó vẫn không nhanh lắm. Các hành vi lý tưởng nên được tăng tốc tuyến tính. Bất kỳ đề xuất cho việc sử dụng song song của xargs?
xargs -P
và >
đang mở ra cho các điều kiện chủng tộc vì vấn đề nửa dòng gnu.org/software/pool/ khuyên Sử dụng GNU Parallel thay vào đó sẽ không gặp phải vấn đề đó.