forked from goodboy/tractor
commit
2d0e35b316
50
NEWS.rst
50
NEWS.rst
|
@ -4,6 +4,56 @@ Changelog
|
||||||
|
|
||||||
.. towncrier release notes start
|
.. towncrier release notes start
|
||||||
|
|
||||||
|
tractor 0.1.0a2 (2021-09-07)
|
||||||
|
============================
|
||||||
|
|
||||||
|
Features
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Add `tokio-style broadcast channels
|
||||||
|
<https://docs.rs/tokio/1.11.0/tokio/sync/broadcast/index.html>`_ as
|
||||||
|
a solution for `#204 <https://github.com/goodboy/tractor/pull/204>`_ and
|
||||||
|
discussed thoroughly in `trio/#987
|
||||||
|
<https://github.com/python-trio/trio/issues/987>`_.
|
||||||
|
|
||||||
|
This gives us local task broadcast functionality using a new
|
||||||
|
``BroadcastReceiver`` type which can wrap ``trio.ReceiveChannel`` and
|
||||||
|
provide fan-out copies of a stream of data to every subscribed consumer.
|
||||||
|
We use this new machinery to provide a ``ReceiveMsgStream.subscribe()``
|
||||||
|
async context manager which can be used by actor-local concumers tasks
|
||||||
|
to easily pull from a shared and dynamic IPC stream. (`#229
|
||||||
|
<https://github.com/goodboy/tractor/pull/229>`_)
|
||||||
|
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Handle broken channel/stream faults where the root's tty lock is left
|
||||||
|
acquired by some child actor who went MIA and the root ends up hanging
|
||||||
|
indefinitely. (`#234 <https://github.com/goodboy/tractor/pull/234>`_)
|
||||||
|
|
||||||
|
There's two parts here: we no longer shield wait on the lock and,
|
||||||
|
now always do our best to release the lock on the expected worst
|
||||||
|
case connection faults.
|
||||||
|
|
||||||
|
|
||||||
|
Deprecations and Removals
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
- Drop stream "shielding" support which was originally added to sidestep
|
||||||
|
a cancelled call to ``.receive()``
|
||||||
|
|
||||||
|
In the original api design a stream instance was returned directly from
|
||||||
|
a call to ``Portal.run()`` and thus there was no "exit phase" to handle
|
||||||
|
cancellations and errors which would trigger implicit closure. Now that
|
||||||
|
we have said enter/exit semantics with ``Portal.open_stream_from()`` and
|
||||||
|
``Context.open_stream()`` we can drop this implicit (and arguably
|
||||||
|
confusing) behavior. (`#230 <https://github.com/goodboy/tractor/pull/230>`_)
|
||||||
|
|
||||||
|
- Drop Python 3.7 support in preparation for supporting 3.9+ syntax.
|
||||||
|
(`#232 <https://github.com/goodboy/tractor/pull/232>`_)
|
||||||
|
|
||||||
|
|
||||||
tractor 0.1.0a1 (2021-08-01)
|
tractor 0.1.0a1 (2021-08-01)
|
||||||
============================
|
============================
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@ Features
|
||||||
--------
|
--------
|
||||||
- **It's just** a ``trio`` API
|
- **It's just** a ``trio`` API
|
||||||
- *Infinitely nesteable* process trees
|
- *Infinitely nesteable* process trees
|
||||||
- Built-in inter-process streaming APIs
|
- Builtin IPC streaming APIs with task fan-out broadcasting
|
||||||
- A (first ever?) "native" multi-core debugger UX for Python using `pdb++`_
|
- A (first ever?) "native" multi-core debugger UX for Python using `pdb++`_
|
||||||
- Support for a swappable, OS specific, process spawning layer
|
- Support for a swappable, OS specific, process spawning layer
|
||||||
- A modular transport stack, allowing for custom serialization,
|
- A modular transport stack, allowing for custom serialization,
|
||||||
|
|
|
@ -1,12 +0,0 @@
|
||||||
Add `tokio-style broadcast channels
|
|
||||||
<https://docs.rs/tokio/1.11.0/tokio/sync/broadcast/index.html>`_ as
|
|
||||||
a solution for `#204 <https://github.com/goodboy/tractor/pull/204>`_ and
|
|
||||||
discussed thoroughly in `trio/#987
|
|
||||||
<https://github.com/python-trio/trio/issues/987>`_.
|
|
||||||
|
|
||||||
This gives us local task broadcast functionality using a new
|
|
||||||
``BroadcastReceiver`` type which can wrap ``trio.ReceiveChannel`` and
|
|
||||||
provide fan-out copies of a stream of data to every subscribed consumer.
|
|
||||||
We use this new machinery to provide a ``ReceiveMsgStream.subscribe()``
|
|
||||||
async context manager which can be used by actor-local concumers tasks
|
|
||||||
to easily pull from a shared and dynamic IPC stream.
|
|
|
@ -1,9 +0,0 @@
|
||||||
Drop stream "shielding" support which was originally added to sidestep
|
|
||||||
a cancelled call to ``.receive()``
|
|
||||||
|
|
||||||
In the original api design a stream instance was returned directly from
|
|
||||||
a call to ``Portal.run()`` and thus there was no "exit phase" to handle
|
|
||||||
cancellations and errors which would trigger implicit closure. Now that
|
|
||||||
we have said enter/exit semantics with ``Portal.open_stream_from()`` and
|
|
||||||
``Context.open_stream()`` we can drop this implicit (and arguably
|
|
||||||
confusing) behavior.
|
|
|
@ -1 +0,0 @@
|
||||||
Drop Python 3.7 support in preparation for supporting 3.9+ syntax.
|
|
|
@ -1,6 +0,0 @@
|
||||||
Handle broken channel/stream faults where the root's tty lock is left acquired by some
|
|
||||||
child actor who went MIA and the root ends up hanging indefinitely.
|
|
||||||
|
|
||||||
There's two parts here:
|
|
||||||
- Don't shield wait on the lock
|
|
||||||
- Always do our best to release the lock on the expected worst case connection faults
|
|
2
setup.py
2
setup.py
|
@ -24,7 +24,7 @@ with open('docs/README.rst', encoding='utf-8') as f:
|
||||||
|
|
||||||
setup(
|
setup(
|
||||||
name="tractor",
|
name="tractor",
|
||||||
version='0.1.0a2.dev0', # alpha zone
|
version='0.1.0a2', # alpha zone
|
||||||
description='structured concurrrent "actors"',
|
description='structured concurrrent "actors"',
|
||||||
long_description=readme,
|
long_description=readme,
|
||||||
license='GPLv3',
|
license='GPLv3',
|
||||||
|
|
Loading…
Reference in New Issue