From aa929273caca2f4e24e3aa9e790272fd4458ad35 Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Wed, 11 Sep 2019 16:15:39 +0100 Subject: bpo-33166: Change os.cpu_count to return active (real) processors (GH-15949) --- .../Windows/2019-09-11-14-42-04.bpo-36634.8Un8ih.rst | 2 ++ Modules/posixmodule.c | 20 +++----------------- 2 files changed, 5 insertions(+), 17 deletions(-) create mode 100644 Misc/NEWS.d/next/Windows/2019-09-11-14-42-04.bpo-36634.8Un8ih.rst diff --git a/Misc/NEWS.d/next/Windows/2019-09-11-14-42-04.bpo-36634.8Un8ih.rst b/Misc/NEWS.d/next/Windows/2019-09-11-14-42-04.bpo-36634.8Un8ih.rst new file mode 100644 index 0000000000..1affdd81cb --- /dev/null +++ b/Misc/NEWS.d/next/Windows/2019-09-11-14-42-04.bpo-36634.8Un8ih.rst @@ -0,0 +1,2 @@ +:func:`os.cpu_count` now returns active processors rather than maximum +processors. diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 88d3d83239..089572f4fd 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -12204,23 +12204,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) -- cgit v1.2.1