Skip to content
Permalink
Browse files

bpo-33166: Change os.cpu_count to return active (real) processors (GH…

…-15949)

(cherry picked from commit aa92927)

Co-authored-by: Steve Dower <steve.dower@python.org>
  • Loading branch information...
miss-islington and zooba committed Sep 11, 2019
1 parent 63eefc3 commit 43ee0e2ca33ae28d37a3dddf10a648895cd46bda
Showing with 5 additions and 17 deletions.
  1. +2 −0 Misc/NEWS.d/next/Windows/2019-09-11-14-42-04.bpo-36634.8Un8ih.rst
  2. +3 −17 Modules/posixmodule.c
@@ -0,0 +1,2 @@
:func:`os.cpu_count` now returns active processors rather than maximum
processors.
@@ -12176,23 +12176,9 @@ os_cpu_count_impl(PyObject *module)
{
int ncpu = 0;
#ifdef MS_WINDOWS
/* Vista is supported and the GetMaximumProcessorCount API is Win7+
Need to fallback to Vista behavior if this call isn't present */
HINSTANCE hKernel32;
static DWORD(CALLBACK *_GetMaximumProcessorCount)(WORD) = NULL;
Py_BEGIN_ALLOW_THREADS
hKernel32 = GetModuleHandleW(L"KERNEL32");
*(FARPROC*)&_GetMaximumProcessorCount = GetProcAddress(hKernel32,
"GetMaximumProcessorCount");
Py_END_ALLOW_THREADS
if (_GetMaximumProcessorCount != NULL) {
ncpu = _GetMaximumProcessorCount(ALL_PROCESSOR_GROUPS);
}
else {
SYSTEM_INFO sysinfo;
GetSystemInfo(&sysinfo);
ncpu = sysinfo.dwNumberOfProcessors;
}
/* Declare prototype here to avoid pulling in all of the Win7 APIs in 3.8 */
DWORD WINAPI GetActiveProcessorCount(WORD group);
ncpu = GetActiveProcessorCount(ALL_PROCESSOR_GROUPS);
#elif defined(__hpux)
ncpu = mpctl(MPC_GETNUMSPUS, NULL, NULL);
#elif defined(HAVE_SYSCONF) && defined(_SC_NPROCESSORS_ONLN)

0 comments on commit 43ee0e2

Please sign in to comment.
You can’t perform that action at this time.