From e469fc7b805cc053b7d300678c2353be9cac268e Mon Sep 17 00:00:00 2001 From: Bruno Oliveira Date: Mon, 24 Aug 2020 14:50:36 -0300 Subject: [PATCH] Revert "Merge pull request #560 from utapyngo/logical-cpu-count" This reverts commit 0094b29a148c584f3e97f8ad00029820757cf260, reversing changes made to c6255faad4bde9385f5e5880f488b02206b1f073. --- setup.py | 2 +- src/xdist/plugin.py | 23 +++++++++++++++++++++-- testing/test_plugin.py | 16 ++++++++++++---- 3 files changed, 34 insertions(+), 7 deletions(-) diff --git a/setup.py b/setup.py index fcba298..d8ecc9a 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,6 @@ from setuptools import setup, find_packages -install_requires = ["execnet>=1.1", "psutil>=3.0.0", "pytest>=6.0.0", "pytest-forked"] +install_requires = ["execnet>=1.1", "pytest>=6.0.0", "pytest-forked"] with open("README.rst") as f: diff --git a/src/xdist/plugin.py b/src/xdist/plugin.py index 9244de2..5db39d8 100644 --- a/src/xdist/plugin.py +++ b/src/xdist/plugin.py @@ -1,12 +1,31 @@ +import os import uuid -import psutil import py import pytest def auto_detect_cpus(): - return psutil.cpu_count(logical=False) or psutil.cpu_count() or 1 + try: + from os import sched_getaffinity + except ImportError: + if os.environ.get("TRAVIS") == "true": + # workaround https://bitbucket.org/pypy/pypy/issues/2375 + return 2 + try: + from os import cpu_count + except ImportError: + from multiprocessing import cpu_count + else: + + def cpu_count(): + return len(sched_getaffinity(0)) + + try: + n = cpu_count() + except NotImplementedError: + return 1 + return n if n else 1 class AutoInt(int): diff --git a/testing/test_plugin.py b/testing/test_plugin.py index c800f44..b875208 100644 --- a/testing/test_plugin.py +++ b/testing/test_plugin.py @@ -35,10 +35,17 @@ def test_dist_options(testdir): def test_auto_detect_cpus(testdir, monkeypatch): - import psutil + import os from xdist.plugin import pytest_cmdline_main as check_options - monkeypatch.setattr(psutil, "cpu_count", lambda logical=True: 99) + if hasattr(os, "sched_getaffinity"): + monkeypatch.setattr(os, "sched_getaffinity", lambda _pid: set(range(99))) + elif hasattr(os, "cpu_count"): + monkeypatch.setattr(os, "cpu_count", lambda: 99) + else: + import multiprocessing + + monkeypatch.setattr(multiprocessing, "cpu_count", lambda: 99) config = testdir.parseconfigure("-n2") assert config.getoption("numprocesses") == 2 @@ -52,9 +59,10 @@ def test_auto_detect_cpus(testdir, monkeypatch): assert config.getoption("numprocesses") == 0 assert config.getoption("dist") == "no" - monkeypatch.setattr(psutil, "cpu_count", lambda logical=True: None) + monkeypatch.delattr(os, "sched_getaffinity", raising=False) + monkeypatch.setenv("TRAVIS", "true") config = testdir.parseconfigure("-nauto") - assert config.getoption("numprocesses") == 1 + assert config.getoption("numprocesses") == 2 def test_boxed_with_collect_only(testdir):