A Python implementation of tokio::sync::mpsc::channel
Project description
🪢 Bounded Channel
This library uses documentation copied and pasted from Tokio's sync::mpsc
library, which they have generously published under the MIT license. 🙏
This is a Python implementation of their bounded channel.
💻 Installation
This package is published to PyPI as babichjacob-bounded-channel
.
🛠 Usage
from asyncio import create_task, gather, run, sleep
from itertools import count
from bounded_channel import bounded_channel, Receiver, Sender
async def producer(sender: Sender[int]):
"Produces integer values as long as there is a receiver to receive them"
for value in count():
await sleep(0.02)
res = await sender.send(value)
# No receivers are listening anymore
if res.is_err():
break
async def consumer(receiver: Receiver[int]):
async for value in receiver:
await sleep(0.03)
print("received", value)
if value >= 100:
# Signal to please stop producing values
receiver.close()
# From then on, the remaining buffered values will be received
# until they run out for good (to a maximum of 165 or so)
# (it's dependent on the difference of speed between the producer and consumer)
# Alternatively, the loop could be broken out of
# and any extra buffered values would be ignored
async def main():
sender, receiver = channel(64)
producer_task = create_task(producer(sender))
consumer_task = create_task(consumer(receiver))
# Drop extra references to the sender and receiver
del sender
del receiver
# so their RAII semantics behave properly
await gather(producer_task, consumer_task)
run(main())
😵 Help! I have a question
Create an issue and I'll try to help.
😡 Fix! There is something that needs improvement
Create an issue or pull request and I'll try to fix.
📄 License
MIT
🙏 Attribution
This README was generated with ❤️ by readme-md-generator
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file babichjacob_bounded_channel-0.3.3.tar.gz
.
File metadata
- Download URL: babichjacob_bounded_channel-0.3.3.tar.gz
- Upload date:
- Size: 7.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.3.2 CPython/3.11.2 Linux/5.15.0-1034-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 44a2e335fa89b6f34120de7db4cc372a67a4a84945c8a0617d1610335ad692cd |
|
MD5 | e5a923d0f69ce9bb8cb36fa3936ab097 |
|
BLAKE2b-256 | 9c1eba7a2ca9f5d96e72041c5637f847bbb54ab84e85e418a36e246a1c824a6b |
File details
Details for the file babichjacob_bounded_channel-0.3.3-py3-none-any.whl
.
File metadata
- Download URL: babichjacob_bounded_channel-0.3.3-py3-none-any.whl
- Upload date:
- Size: 7.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.3.2 CPython/3.11.2 Linux/5.15.0-1034-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ad456613c425c7aac8811da11255ff57cae310a3b1cfcc638663aa8a7e458923 |
|
MD5 | 1f446eb90203b74abe2d2479afca6467 |
|
BLAKE2b-256 | 079a03cde0ad49bd8046b43825b55765f60eba4fe3036a95bc7e45a558423f7e |