mirror of
https://github.com/gentoo-mirror/gentoo.git
synced 2026-09-24 04:59:14 -07:00
multiprocessing.eclass: Introduce get_nproc() to get no of CPUs
Introduce get_nproc(), a portable 'nproc' wrapper. It uses either 'nproc' or a fallback Python multiprocessing module call to attempt to determine the number of available processing units. This can be used e.g. to determine a safe number of jobs to run when MAKEOPTS specifies unlimited --jobs and the build system in question does not support --load-average.
This commit is contained in:
@@ -53,6 +53,38 @@ bashpid() {
|
||||
sh -c 'echo ${PPID}'
|
||||
}
|
||||
|
||||
# @FUNCTION: get_nproc
|
||||
# @USAGE: [${fallback:-1}]
|
||||
# @DESCRIPTION:
|
||||
# Attempt to figure out the number of processing units available.
|
||||
# If the value can not be determined, prints the provided fallback
|
||||
# instead. If no fallback is provided, defaults to 1.
|
||||
get_nproc() {
|
||||
local nproc
|
||||
|
||||
# GNU
|
||||
if type -P nproc &>/dev/null; then
|
||||
nproc=$(nproc)
|
||||
fi
|
||||
|
||||
# BSD
|
||||
if [[ -z ${nproc} ]] && type -P sysctl &>/dev/null; then
|
||||
nproc=$(sysctl -n hw.ncpu 2>/dev/null)
|
||||
fi
|
||||
|
||||
# fallback to python2.6+
|
||||
# note: this may fail (raise NotImplementedError)
|
||||
if [[ -z ${nproc} ]] && type -P python &>/dev/null; then
|
||||
nproc=$(python -c 'import multiprocessing; print(multiprocessing.cpu_count());' 2>/dev/null)
|
||||
fi
|
||||
|
||||
if [[ -n ${nproc} ]]; then
|
||||
echo "${nproc}"
|
||||
else
|
||||
echo "${1:-1}"
|
||||
fi
|
||||
}
|
||||
|
||||
# @FUNCTION: makeopts_jobs
|
||||
# @USAGE: [${MAKEOPTS}]
|
||||
# @DESCRIPTION:
|
||||
|
||||
Reference in New Issue
Block a user