Author: Richard Plangger <planri...@gmail.com> Branch: Changeset: r87789:d485def1cc89 Date: 2016-10-14 16:00 +0200 http://bitbucket.org/pypy/pypy/changeset/d485def1cc89/
Log: test + impl cpu_count in rposix module diff --git a/rpython/rlib/rposix.py b/rpython/rlib/rposix.py --- a/rpython/rlib/rposix.py +++ b/rpython/rlib/rposix.py @@ -2305,3 +2305,47 @@ self.cached_nosys = -1 _pipe2_syscall = ENoSysCache() + +# cpu count for linux, windows and mac (+ bsds) +# note that the code is copied from cpython and split up here +if sys.platform.startswith('linux'): + cpucount_eci = ExternalCompilationInfo(includes=["unistd.h"], + separate_module_sources=[""" + RPY_EXTERN int _cpu_count(void) { + return sysconf(_SC_NPROCESSORS_ONLN); + } + """]) +elif sys.platform == "win32": + cpucount_eci = ExternalCompilationInfo(includes=["Windows.h"], + separate_module_sources=[""" + RPY_EXTERN int _cpu_count(void) { + int ncpu = 0; + SYSTEM_INFO sysinfo; + GetSystemInfo(&sysinfo); + return sysinfo.dwNumberOfProcessors; + } + """]) +else: + cpucount_eci = ExternalCompilationInfo(includes=["sys/types.h", "sys/sysctl.h"], + separate_module_sources=[""" + RPY_EXTERN int _cpu_count(void) { + int ncpu = 0; + #if defined(__DragonFly__) || \ + defined(__OpenBSD__) || \ + defined(__FreeBSD__) || \ + defined(__NetBSD__) || \ + defined(__APPLE__) + int mib[2]; + size_t len = sizeof(ncpu); + mib[0] = CTL_HW; + mib[1] = HW_NCPU; + if (sysctl(mib, 2, &ncpu, &len, NULL, 0) != 0) + ncpu = 0; + #endif + return ncpu; + } + """]) + +cpu_count = rffi.llexternal('_cpu_count', [], rffi.INT_real, + compilation_info=cpucount_eci) + diff --git a/rpython/rlib/test/test_rposix.py b/rpython/rlib/test/test_rposix.py --- a/rpython/rlib/test/test_rposix.py +++ b/rpython/rlib/test/test_rposix.py @@ -608,3 +608,7 @@ def test_sync(): if sys.platform != 'win32': rposix.sync() + +def test_cpu_count(): + cc = rposix.cpu_count() + assert cc >= 1 _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit