J'utilise xargspour appeler un script python pour traiter environ 30 millions de petits fichiers. J'espère utiliser xargspour paralléliser le processus. La commande que j'utilise est:
find ./data -name "*.json" -print0 |
xargs -0 -I{} -P 40 python Convert.py {} > log.txt
Fondamentalement, Convert.pylira dans un petit fichier json (4 Ko), effectuera un certain traitement et écrit dans un autre fichier 4 Ko. Je cours sur un serveur avec 40 cœurs CPU. Et aucun autre processus gourmand en CPU n'est en cours d'exécution sur ce serveur.
En surveillant htop (btw, existe-t-il un autre bon moyen de surveiller les performances du processeur?), Je trouve que ce -P 40n'est pas aussi rapide que prévu. Parfois, tous les cœurs gèlent et diminuent presque à zéro pendant 3-4 secondes, puis récupèrent à 60-70%. Ensuite, j'essaie de diminuer le nombre de processus parallèles à -P 20-30, mais ce n'est toujours pas très rapide. Le comportement idéal devrait être une accélération linéaire. Des suggestions pour l'utilisation parallèle de xargs?
xargs -P et > s'ouvre pour des conditions de course en raison du problème de demi-ligne gnu.org/software/parallel/… Utiliser GNU Parallel à la place n'aura pas ce problème.