Comme il est courant d’écrire des scripts shell qui transmettent le nombre de travaux à une commande, je suis curieux de savoir ce qu’est un bon moyen portable pour obtenir le nombre de processeurs sur les systèmes Unix traditionnels.
Quelque chose comme ça mais ne dépendant pas de Python.
* Par grand public, je veux dire que cela fonctionnera sur le système Unix populaire utilisé en production aujourd’hui (Linux / BSD / Darwin? Mais le plus portable sera le mieux).
Voici une fonction assez portable pour obtenir le nombre de processeurs fonctionnant dans sh
:
nproc
sous Linux. getconf
comme getconf
de repli, cela fait partie de coreutils. Linux
Darwin
(MacOS) FreeBSD
, NetBSD
, OpenBSD
… probablement d’autres, n’hésitez pas à tester 🙂
N’hésitez pas à suggérer des ajouts:
#!/bin/sh portable_nproc() { OS=$(uname -s) if [ "$OS" = "Linux" ]; then NPROCS=$(nproc --all) elif [ "$OS" = "Darwin" ] || \ [ "$(echo $OS | grep -q BSD" = "BSD" ]; then NPROCS=$(sysctl -n hw.ncpu) else NPROCS=$(getconf _NPROCESSORS_ONLN) # glibc/coreutils fallback fi echo "$NPROCS" } # test portable_nproc
Une commande plus concise qui couvre de nombreux systèmes consiste à vérifier getconf
pour la glibc, puis sysctl
pour la famille BSD d’Unix: par exemple:
getconf _NPROCESSORS_ONLN 2>/dev/null || sysctl -n hw.ncpu
J’ai une légère préférence pour la vérification de chaque plate-forme car cela permet d’append plus facilement d’autres, mais dans la pratique, la simple ligne fonctionne dans de nombreux cas.
Utilisez nproc qui fait partie de coreutils, il devrait donc être disponible sur la plupart des installations Linux.
La commande nproc imprime le nombre d’unités de traitement disponibles pour le processus en cours, qui peut être inférieur au nombre de processeurs en ligne.
Pour trouver le nombre de cœurs / processeurs installés, utilisez nproc –all
$ nproc --all 4
ou un plus portable sera sysctl avec / proc / cpuinfo combiné
sysctl devrait fonctionner sur darwin / BSD
grep -c '^processor' /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu