Hi Isaul
Am 25.10.19 um 15:50 schrieb Isaul Vargas:
This looks promising on the surface. I think we should outline what a
new concurrent test runner should look like.
These are things in my wish list:
* Tests are ran as a queue for each process. Currently x-dist batches
the tests to N workers, and maybe grabs a test or two in that batch.
But if any test takes a lot longer than expected, that batch is held up.
We intend to add richer sheduling patters (which in turn will need richr
communication about collection (marks, fixtures, parameters)
* The ability to pin tests to a worker. Maybe you have a class of
tests that need a single shared resource that would be difficult to
pickle, so using a marker allows you to do this. There should be
markers to allow grouping of tests to a single worker. Probably at the
class and module level.
dito
* Add tooling to make it easy for fixtures to share data among
processes. Maybe a fixture runs a long process to generate data, but
the data is easily pickleable. There should be way to have a fixture
initialize once, and share the result with other processes.
we will introduce something to detail shared resources, but we want
make fixtures that are inter-process, its just not possible to get
sensibly right
* Allow some form of locking for function scope fixtures so that they
can block when running concurrently. This could be useful for things
that are complicated to share, but you want only one process to run at
at time during setup or teardown.
i believe a resource hand-off protocol can be integrated with scheduling,
this detail will need careful design work
-- Ronny
I'll be happy to test this new project and provide feedback. I am
really excited that is happening.
On Thu, Oct 24, 2019 at 8:46 AM Bruno Oliveira <nicodde...@gmail.com
<mailto:nicodde...@gmail.com>> wrote:
Hi everyone,
For some time now |execnet| has been in maintenance only mode, and
even so very few people are willing to maintain it; lately just
myself and I’m not a good choice given that I don’t know the
codebase at all, plus I have tons on my plate already. This poses
a problem because often we have bug reports or feature requests in
|pytest-xdist| which would require fixing or improving |execnet|,
and are currently left without solution.
Ronny and I have on occasion discussed the possibility of changing
|execnet|‘s backend , with the current contenders being
|multiprocessing| for local distribution and |mitogen| for remote
distribution.
I would like to write down some thoughts and gather opinions from
the mailing list members.
multiprocessing
Aside from not needing to maintain |execnet| anymore, being able
to use |multiprocessing| would bring several benefits:
*
|pytest -s| would work just fine, because |multiprocessing|
does not use |stdout/stderr| for communication. This is a
often requested feature but which we can’t (with current
expertise) implement on |execnet|.
*
It would automatically support anything that can be picked to
be transmitted across the wire. Currently execnet does not
support custom user types and some builtins (frozen sets for
example).
Without |execnet| we would lose the ability of running the tests
in different interpreter versions, but I believe this has been
supplanted by |tox| in the ecosystem.
mitogen
Using |mitogen| for remote execution would provide automatic
bootstrap of the Python environment, which is not currently
supported by |xdist|‘s ssh remote execution, greatly limiting its
usefulness in real-time scenarios.
This is Ronny’s idea and he can add more here if wanted.
pytest-xdist2?
All the changes mentioned above would break backward compatibility
*hard*, because details of the |execnet| implementation are
currently exposed to users in the command-line:
|pytest -d --tx popen//python |
And in several hooks:
|def pytest_xdist_newgateway(gateway): """ called on new raw
gateway creation. """ |
(|gateway| is an |execnet| object)
To incorporate the new backends, we would need to severely break
both command-line and existing hooks. Given the level of breakage
this could cause, just bumping the major version in this case
doesn’t seem enough, it would be a disservice to users given that
probably nobody pins pytest-xdist to |<=2|, and it would break the
world with hard to understand error messages once a first major
release was released.
Because of this, we have been discussing creating a new package,
|pytest-xdist2| (other suggestions are welcome), without any
backward compatibility guarantees with |pytest-xdist|.
|pytest-xdist2| would, at first, only support local test
distribution using |multiprocessing| (|-n| flag), no new hooks,
and no remote execution. I’ve made a proof of concept here:
https://github.com/pytest-dev/pytest-xdist/pull/479
So it definitely seems possible. One immediate benefit is that the
proof of concept above supports |pytest -s| already, and can
transfer anything that’s pickled over the wire.
So I would like to know what people think of the above ideas, if
they are good/bad, and/or suggest alternatives that we are not
seeing right now.
Ronny, please feel free to add to this email and correct anything
I got wrong.
Cheers,
Bruno
_______________________________________________
pytest-dev mailing list
pytest-dev@python.org <mailto:pytest-dev@python.org>
https://mail.python.org/mailman/listinfo/pytest-dev
_______________________________________________
pytest-dev mailing list
pytest-dev@python.org
https://mail.python.org/mailman/listinfo/pytest-dev
_______________________________________________
pytest-dev mailing list
pytest-dev@python.org
https://mail.python.org/mailman/listinfo/pytest-dev