diff --git a/setup.py b/setup.py index 3eac3be..253f8b4 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,6 @@ from setuptools import setup, find_packages -install_requires = ["execnet>=1.1", "pytest>=4.4.0", "pytest-forked", "six"] +install_requires = ["execnet>=1.1", "psutil>=3.0.0", "pytest>=4.4.0", "pytest-forked", "six"] with open("README.rst") as f: diff --git a/src/xdist/plugin.py b/src/xdist/plugin.py index 5165126..fea8b5f 100644 --- a/src/xdist/plugin.py +++ b/src/xdist/plugin.py @@ -1,28 +1,13 @@ -import os import uuid +import psutil import py import pytest def auto_detect_cpus(): 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() + n = psutil.cpu_count(logical=False) except NotImplementedError: return 1 return n if n else 1 diff --git a/testing/test_plugin.py b/testing/test_plugin.py index ca2cc2c..419842d 100644 --- a/testing/test_plugin.py +++ b/testing/test_plugin.py @@ -35,17 +35,10 @@ def test_dist_options(testdir): def test_auto_detect_cpus(testdir, monkeypatch): - import os + import psutil from xdist.plugin import pytest_cmdline_main as check_options - 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) + monkeypatch.setattr(psutil, "cpu_count", lambda logical=True: 99) config = testdir.parseconfigure("-n2") assert config.getoption("numprocesses") == 2 @@ -58,10 +51,12 @@ def test_auto_detect_cpus(testdir, monkeypatch): assert config.getoption("usepdb") assert config.getoption("numprocesses") == 0 - monkeypatch.delattr(os, "sched_getaffinity", raising=False) - monkeypatch.setenv("TRAVIS", "true") + def cpu_count_not_implemented(logical=True): + raise NotImplementedError + + monkeypatch.setattr(psutil, "cpu_count", cpu_count_not_implemented) config = testdir.parseconfigure("-nauto") - assert config.getoption("numprocesses") == 2 + assert config.getoption("numprocesses") == 1 def test_boxed_with_collect_only(testdir):