xargs
Yaklaşık 30 milyon küçük dosyayı işlemek için bir python betiği çağırmak için kullanıyorum . xargs
Süreci paralelleştirmek için kullanmayı umuyorum . Kullanıyorum komut:
find ./data -name "*.json" -print0 |
xargs -0 -I{} -P 40 python Convert.py {} > log.txt
Temel olarak, Convert.py
küçük bir json dosyasında (4kb) okur, biraz işlem yapar ve başka bir 4kb dosyasına yazar. 40 CPU çekirdeği olan bir sunucu üzerinde çalışıyorum. Ve bu sunucuda başka bir CPU yoğun işlem çalışmıyor.
Htop'u izleyerek (btw, CPU performansını izlemenin başka iyi bir yolu var mı?), -P 40
Beklediğim kadar hızlı olmadığını düşünüyorum. Bazen tüm çekirdekler 3-4 saniye donar ve neredeyse sıfıra düşer, daha sonra% 60-70'e geri döner. Sonra paralel süreçlerin sayısını azaltmaya çalışıyorum -P 20-30
, ama yine de çok hızlı değil. İdeal davranış doğrusal hızlanma olmalıdır. Xargs'ın paralel kullanımı için herhangi bir öneriniz var mı?
xargs -P
ve gnu.org/software/parallel/…>
yarı çizgi problemi nedeniyle yarış koşullarına açılmaktadır . Bunun yerine GNU Parallel kullanmak bu problemi yaşamayacaktır.