@@ -28,35 +28,38 @@ class Broadcast(Generic[T]):
2828 append/pop operations on either side of a [deque][collections.deque], which
2929 are thread-safe. Because of this, `Broadcast` channels are thread-safe.
3030
31+ When there are multiple channel receivers, they can be awaited
32+ simultaneously using [Select][frequenz.channels.Select],
33+ [Merge][frequenz.channels.Merge] or
34+ [MergeNamed][frequenz.channels.MergeNamed].
35+
3136 Example:
32- ``` python
33- async def send(sender: channel.Sender) -> None:
34- while True:
35- next = random.randint(3, 17)
36- print(f"sending: {next}")
37- await sender.send(next)
37+ ``` python
38+ async def send(sender: channel.Sender) -> None:
39+ while True:
40+ next = random.randint(3, 17)
41+ print(f"sending: {next}")
42+ await sender.send(next)
3843
3944
40- async def recv(id: int, receiver: channel.Receiver) -> None:
41- while True:
42- next = await receiver.receive()
43- print(f"receiver_{id} received {next}")
44- await asyncio.sleep(0.1) # sleep (or work) with the data
45+ async def recv(id: int, receiver: channel.Receiver) -> None:
46+ while True:
47+ next = await receiver.receive()
48+ print(f"receiver_{id} received {next}")
49+ await asyncio.sleep(0.1) # sleep (or work) with the data
4550
4651
47- bcast = channel.Broadcast()
52+ bcast = channel.Broadcast()
4853
49- sender = bcast.get_sender()
50- receiver_1 = bcast.get_receiver()
54+ sender = bcast.get_sender()
55+ receiver_1 = bcast.get_receiver()
5156
52- asyncio.create_task(send(sender))
57+ asyncio.create_task(send(sender))
5358
54- await recv(1, receiver_1)
55- ```
59+ await recv(1, receiver_1)
60+ ```
5661
57- Check the `tests` and `benchmarks` directories for more examples. When
58- there are multiple channel receivers, they can be awaited simultaneously
59- using `channel.Select` or `channel.Merge`.
62+ Check the `tests` and `benchmarks` directories for more examples.
6063 """
6164
6265 def __init__ (self , name : str , resend_latest : bool = False ) -> None :
0 commit comments