Skip to main content

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

babichjacob_bounded_channel-0.3.3.tar.gz (7.0 kB view details)

Uploaded Source

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

Hashes for babichjacob_bounded_channel-0.3.3.tar.gz
Algorithm Hash digest
SHA256 44a2e335fa89b6f34120de7db4cc372a67a4a84945c8a0617d1610335ad692cd
MD5 e5a923d0f69ce9bb8cb36fa3936ab097
BLAKE2b-256 9c1eba7a2ca9f5d96e72041c5637f847bbb54ab84e85e418a36e246a1c824a6b

See more details on using hashes here.

File details

Details for the file babichjacob_bounded_channel-0.3.3-py3-none-any.whl.

File metadata

File hashes

Hashes for babichjacob_bounded_channel-0.3.3-py3-none-any.whl
Algorithm Hash digest
SHA256 ad456613c425c7aac8811da11255ff57cae310a3b1cfcc638663aa8a7e458923
MD5 1f446eb90203b74abe2d2479afca6467
BLAKE2b-256 079a03cde0ad49bd8046b43825b55765f60eba4fe3036a95bc7e45a558423f7e

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page