From 43ee0e2ca33ae28d37a3dddf10a648895cd46bda Mon Sep 17 00:00:00 2001 From: "Miss Islington (bot)" <31488909+miss-islington@users.noreply.github.com> Date: Wed, 11 Sep 2019 08:56:13 -0700 Subject: bpo-33166: Change os.cpu_count to return active (real) processors (GH-15949) (cherry picked from commit aa929273caca2f4e24e3aa9e790272fd4458ad35) Co-authored-by: Steve Dower --- .../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 0000000..1affdd8 --- /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 771c561..cf6c00b 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -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) -- cgit v0.12