[pypy-commit] pypy detect_cpu_count: (catalin_m): Updated CPU detection code in rpython/config/support.py. Now returns the actual number of available cores. Added a non-linux implementation as well. Updated test.

catalin_m pypy.commits at gmail.com
Wed Apr 13 10:55:17 EDT 2016


Author: Catalin Gabriel Manciu <catalin.gabriel.manciu at intel.com>
Branch: detect_cpu_count
Changeset: r83650:b0229fe0397d
Date: 2016-04-13 17:45 +0300
http://bitbucket.org/pypy/pypy/changeset/b0229fe0397d/

Log:	(catalin_m): Updated CPU detection code in
	rpython/config/support.py. Now returns the actual number of
	available cores. Added a non-linux implementation as well. Updated
	test.

diff --git a/rpython/config/support.py b/rpython/config/support.py
--- a/rpython/config/support.py
+++ b/rpython/config/support.py
@@ -12,21 +12,21 @@
     elif sys.platform.startswith('freebsd'):
         return sysctl_get_cpu_count('/sbin/sysctl')
     elif not sys.platform.startswith('linux'):
-        return 1    # implement me
+        try:
+            import multiprocessing
+            return multiprocessing.cpu_count()
+        except:
+            return 1    # try to use cpu_count on other platforms or fallback to 1
     try:
         if isinstance(filename_or_file, str):
             f = open(filename_or_file, "r")
         else:
             f = filename_or_file
-        count = max([int(re.split('processor.*(\d+)', line)[1])
-                    for line in f.readlines()
-                    if line.startswith('processor')]) + 1
-        if count >= 4:
-            return max(count // 2, 3)
-        else:
-            return count
+        return max([int(re.split('processor.*?(\d+)', line)[1])
+                for line in f.readlines()
+                if line.startswith('processor')]) + 1   # returning the actual number of available CPUs
     except:
-        return 1 # we really don't want to explode here, at worst we have 1
+        return 1    # we really don't want to explode here, at worst we have 1
 
 def sysctl_get_cpu_count(cmd, name='hw.ncpu'):
     try:
diff --git a/rpython/config/test/test_support.py b/rpython/config/test/test_support.py
--- a/rpython/config/test/test_support.py
+++ b/rpython/config/test/test_support.py
@@ -45,7 +45,7 @@
     saved = os.environ
     try:
         os.environ = FakeEnviron(None)
-        assert support.detect_number_of_processors(StringIO(cpuinfo)) == 3
+        assert support.detect_number_of_processors(StringIO(cpuinfo)) == 4
         assert support.detect_number_of_processors('random crap that does not exist') == 1
         os.environ = FakeEnviron('-j2')
         assert support.detect_number_of_processors(StringIO(cpuinfo)) == 1


More information about the pypy-commit mailing list