tractor/nooz/343.trivial.rst

972 B

Rework our .trionics.BroadcastReceiver internals to avoid method recursion and approach a design and interface closer to trio's MemoryReceiveChannel.

The details of the internal changes include:

  • implementing a BroadcastReceiver.receive_nowait() and using it within the async .receive() thus avoiding recursion from .receive().
  • failing over to an internal ._receive_from_underlying() when the _nowait() call raises trio.WouldBlock
  • adding BroadcastState.statistics() for debugging and testing both internals and by users.
  • add an internal BroadcastReceiver._raise_on_lag: bool which can be set to avoid Lagged raising for possible use cases where a user wants to choose between a [cheap or nasty pattern](https://zguide.zeromq.org/docs/chapter7/#The-Cheap-or-Nasty-Pattern) the the particular stream (we use this in piker's dark clearing engine to avoid fast feeds breaking during HFT periods).