Compare commits

..

10 Commits

Author SHA1 Message Date
Shane Smiskol
2b4372bd62 gotcha
Some checks failed
test / package (push) Failing after 2m31s
test / test (ubuntu-latest, 3.10, py310-psutil) (push) Has been skipped
test / test (ubuntu-latest, 3.10, py310-pytestlatest) (push) Has been skipped
test / test (ubuntu-latest, 3.10, py310-setproctitle) (push) Has been skipped
test / test (ubuntu-latest, 3.11, py311-pytestlatest) (push) Has been skipped
test / test (ubuntu-latest, 3.11, py311-pytestmain) (push) Has been skipped
test / test (ubuntu-latest, 3.12, py312-pytestlatest) (push) Has been skipped
test / test (ubuntu-latest, 3.13, py313-pytestlatest) (push) Has been skipped
test / test (ubuntu-latest, 3.9, py39-pytestlatest) (push) Has been skipped
test / test (ubuntu-latest, 3.9, py39-pytestmin) (push) Has been skipped
test / test (windows-latest, 3.10, py310-psutil) (push) Has been skipped
test / test (windows-latest, 3.10, py310-pytestlatest) (push) Has been skipped
test / test (windows-latest, 3.10, py310-setproctitle) (push) Has been skipped
test / test (windows-latest, 3.11, py311-pytestlatest) (push) Has been skipped
test / test (windows-latest, 3.11, py311-pytestmain) (push) Has been skipped
test / test (windows-latest, 3.12, py312-pytestlatest) (push) Has been skipped
test / test (windows-latest, 3.13, py313-pytestlatest) (push) Has been skipped
test / test (windows-latest, 3.9, py39-pytestlatest) (push) Has been skipped
test / test (windows-latest, 3.9, py39-pytestmin) (push) Has been skipped
2025-07-25 19:39:12 -07:00
Shane Smiskol
1bb1a0f62a one line 2025-07-25 19:38:49 -07:00
Shane Smiskol
f8ea4a23b7 fix again 2025-07-25 19:37:34 -07:00
pre-commit-ci[bot]
68bf76dce4 [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2025-07-26 02:35:24 +00:00
Shane Smiskol
28c0a72e3a fix test 2025-07-25 19:35:11 -07:00
pre-commit-ci[bot]
9d7dcae9d2 [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2025-07-26 02:14:35 +00:00
Shane Smiskol
a3374b8d5c clean up 2025-07-25 19:14:22 -07:00
Shane Smiskol
5824f221ca clean up 2025-07-25 19:14:10 -07:00
pre-commit-ci[bot]
6ca0790e02 [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2025-07-26 02:12:40 +00:00
Shane Smiskol
b59e010821 parallel 2025-07-25 18:50:32 -07:00
2 changed files with 23 additions and 6 deletions

View File

@@ -1,6 +1,7 @@
from __future__ import annotations
from collections.abc import Sequence
from concurrent.futures import ThreadPoolExecutor
import enum
import fnmatch
import os
@@ -94,15 +95,23 @@ class NodeManager:
) -> list[WorkerController]:
self.config.hook.pytest_xdist_setupnodes(config=self.config, specs=self.specs)
self.trace("setting up nodes")
return [self.setup_node(spec, putevent) for spec in self.specs]
with ThreadPoolExecutor(max_workers=len(self.specs)) as executor:
futs = [
executor.submit(self.setup_node, spec, putevent, idx)
for idx, spec in enumerate(self.specs)
]
return [f.result() for f in futs]
def setup_node(
self,
spec: execnet.XSpec,
putevent: Callable[[tuple[str, dict[str, Any]]], None],
idx: int | None = None,
) -> WorkerController:
if getattr(spec, "execmodel", None) != "main_thread_only":
spec = execnet.XSpec(f"execmodel=main_thread_only//{spec}")
if idx is not None:
spec = execnet.XSpec(f"{spec}//id=gw{idx}")
gw = self.group.makegateway(spec)
self.config.hook.pytest_xdist_newgateway(gateway=gw)
self.rsync_roots(gw)

View File

@@ -82,11 +82,19 @@ class TestNodeManagerPopen:
call = hookrecorder.popcall("pytest_xdist_setupnodes")
assert len(call.specs) == 2
call = hookrecorder.popcall("pytest_xdist_newgateway")
assert call.gateway.spec == execnet.XSpec("execmodel=main_thread_only//popen")
assert call.gateway.id == "gw0"
call = hookrecorder.popcall("pytest_xdist_newgateway")
assert call.gateway.id == "gw1"
# check expected gateways
gw_calls = [
hookrecorder.popcall("pytest_xdist_newgateway"),
hookrecorder.popcall("pytest_xdist_newgateway"),
]
assert {c.gateway.id for c in gw_calls} == {"gw0", "gw1"}
for c in gw_calls:
expected_spec = execnet.XSpec(
f"execmodel=main_thread_only//popen//id={c.gateway.id}"
)
assert c.gateway.spec == expected_spec
assert len(hm.group) == 2
hm.teardown_nodes()
assert not len(hm.group)