[Python-checkins] bpo-33166: Change os.cpu_count to return active (real) processors (GH-15949)

Zachary Ware webhook-mailer at python.org
Wed Sep 11 11:15:43 EDT 2019


https://github.com/python/cpython/commit/aa929273caca2f4e24e3aa9e790272fd4458ad35
commit: aa929273caca2f4e24e3aa9e790272fd4458ad35
branch: master
author: Steve Dower <steve.dower at python.org>
committer: Zachary Ware <zachary.ware at gmail.com>
date: 2019-09-11T16:15:39+01:00
summary:

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

files:
A Misc/NEWS.d/next/Windows/2019-09-11-14-42-04.bpo-36634.8Un8ih.rst
M Modules/posixmodule.c

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 000000000000..1affdd81cbfa
--- /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 88d3d8323950..089572f4fdab 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)



More information about the Python-checkins mailing list