summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2019-09-11 08:56:13 -0700
committerGitHub <noreply@github.com>2019-09-11 08:56:13 -0700
commit43ee0e2ca33ae28d37a3dddf10a648895cd46bda (patch)
treee00e04f811ee3a7f4477315f764b02c14c5037d5
parent63eefc35674ec12ab4d00af4feaf21de4cb1c91c (diff)
downloadcpython-git-43ee0e2ca33ae28d37a3dddf10a648895cd46bda.tar.gz
bpo-33166: Change os.cpu_count to return active (real) processors (GH-15949)
(cherry picked from commit aa929273caca2f4e24e3aa9e790272fd4458ad35) Co-authored-by: Steve Dower <steve.dower@python.org>
-rw-r--r--Misc/NEWS.d/next/Windows/2019-09-11-14-42-04.bpo-36634.8Un8ih.rst2
-rw-r--r--Modules/posixmodule.c20
2 files changed, 5 insertions, 17 deletions
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 771c561615..cf6c00b7d6 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)