Sto usando xargs
per chiamare uno script Python per elaborare circa 30 milioni di piccoli file. Spero di usare xargs
per parallelizzare il processo. Il comando che sto usando è:
find ./data -name "*.json" -print0 |
xargs -0 -I{} -P 40 python Convert.py {} > log.txt
Fondamentalmente, Convert.py
leggerà in un piccolo file json (4kb) , eseguirà alcune elaborazioni e scriverà in un altro file da 4kb. Sono in esecuzione su un server con 40 core della CPU. E nessun altro processo ad alta intensità di CPU è in esecuzione su questo server.
Monitorando htop (a proposito, c'è qualche altro buon modo per monitorare le prestazioni della CPU?), Trovo che -P 40
non sia veloce come previsto. A volte tutti i core si congelano e diminuiscono quasi a zero per 3-4 secondi, quindi si ripristinano al 60-70%. Quindi provo a ridurre il numero di processi paralleli a -P 20-30
, ma non è ancora molto veloce. Il comportamento ideale dovrebbe essere l'accelerazione lineare. Qualche suggerimento per l'uso parallelo di xargs?
xargs -P
e si >
sta aprendo per le condizioni di gara a causa del problema della mezza linea gnu.org/software/parallel/… L' uso di GNU Parallel invece non avrà questo problema.