Saya menggunakan xargs
untuk memanggil skrip python untuk memproses sekitar 30 juta file kecil. Saya berharap dapat digunakan xargs
untuk memparalelkan proses. Perintah yang saya gunakan adalah:
find ./data -name "*.json" -print0 |
xargs -0 -I{} -P 40 python Convert.py {} > log.txt
Pada dasarnya, Convert.py
akan membaca dalam file json kecil (4kb), melakukan pemrosesan dan menulis ke file 4kb lain. Saya menjalankan server dengan 40 core CPU. Dan tidak ada proses intensif CPU lainnya yang berjalan di server ini.
Dengan memantau htop (btw, apakah ada cara lain yang baik untuk memantau kinerja CPU?), Saya menemukan itu -P 40
tidak secepat yang diharapkan. Terkadang semua core akan membeku dan berkurang hampir nol selama 3-4 detik, kemudian akan pulih hingga 60-70%. Lalu saya mencoba untuk mengurangi jumlah proses paralel -P 20-30
, tetapi masih belum terlalu cepat. Tingkah laku yang ideal harus linear-speed. Adakah saran untuk penggunaan paralel xargs?
xargs -P
dan >
terbuka untuk kondisi balapan karena masalah setengah-line gnu.org/software/parallel/… Menggunakan GNU Parallel sebagai gantinya tidak akan memiliki masalah itu.