@@ -28,10 +28,13 @@ series, once the consumers that need them have released without them.
2828 ``python -m execnet worker ... `` for a direct interpreter launch and
2929 ``execnet worker ... `` under ``uv run ``; both are the same CLI.
3030 ``execnet-socketserver `` still works and forwards to ``execnet server ``
31- with a ``DeprecationWarning ``. ``execnet info `` reports version, trio
32- availability and supported transports as JSON, and replaces the
33- ``import execnet, trio `` probe used to decide whether a ``python= ``
34- interpreter can host a worker directly.
31+ with a ``DeprecationWarning ``. ``execnet info `` reports as JSON the execnet
32+ version, whether this interpreter can serve a worker (``worker ``) and on
33+ which engines (``engines ``), the trio version, Python, executable, platform
34+ and supported protocols. It replaces the ``import execnet, trio `` probe used
35+ to decide whether a ``python= `` interpreter can host a worker directly; a
36+ coordinator falls back to the ``trio `` key for a remote that predates
37+ ``worker ``.
3538* The protocol no longer has to be the worker's stdin/stdout. A new
3639 ``transport=socket|stdio `` spec key selects, and ``socket `` is the default
3740 for every worker execnet spawns itself: an inherited socketpair for
@@ -282,10 +285,26 @@ series, once the consumers that need them have released without them.
282285 two meet the same contract -- start, a portal, one door to the root task scope, the
283286 group registry, a stop that joins -- and are tested against the same suite.
284287
285- **Only the trio engine can host gateways. ** The protocol core is still written
286- against trio directly, so a group built on an asyncio engine is refused with a
287- message saying what is missing. The backend exists so that the boundary between
288- execnet and the async library under it is a tested one rather than an intention.
288+ Both run the whole protocol, coordinator and worker alike: the protocol core
289+ reaches its async library only through a small neutral layer. An engine picks
290+ trio when it is installed and asyncio otherwise; ``backend= `` overrides that.
291+
292+ * **trio is an extra where asyncio can run the protocol. ** Nothing extra is
293+ required on Python 3.11 and newer; ``execnet[trio] `` asks for trio anywhere,
294+ and an install that has it keeps using it. Python 3.10 has no
295+ ``asyncio.TaskGroup ``, so trio stays a requirement there.
296+ * New ``execnet.Deployment `` puts a project on a host *before * any worker runs
297+ against it: a frozen ``uv `` environment, the project's own wheel installed into
298+ it, and the files the wheel does not carry. It hands back ``execnet.Deployed ``,
299+ whose ``translate() `` maps a local path to where it landed. New
300+ ``execnet.transfer `` sends a tree to a host, only what differs. Both run as a
301+ service inside the worker, so no source is shipped, and both are available on
302+ every namespace.
303+ * ``RSync `` is deprecated and now an adapter over ``execnet.transfer ``; the old
304+ source-shipped receiver is gone. ``filter ``, ``delete ``, the progress hook and
305+ ``finishedcallback `` behave as before. ``callback `` receives the gateway rather
306+ than a channel, and fires when a file is sent rather than when the far side
307+ confirms it -- the new protocol has no per-file acknowledgement.
289308
290309* Gateway groups share one ``execnet.ProtocolEngine `` per process -- one OS thread
291310 running a loop -- instead of starting a thread each. Pass an explicit one as
0 commit comments