Metadata-Version: 2.1
Name: asynckivy-ext-queue
Version: 0.2.0
Summary: Extension for asynckivy programs
Home-page: https://github.com/asyncgui/asynckivy-ext-queue
License: MIT
Author: Nattōsai Mitō
Author-email: flow4re2c@gmail.com
Requires-Python: >=3.9,<4.0
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Topic :: Software Development :: Libraries
Requires-Dist: asynckivy (>=0.6,<0.7)
Project-URL: Repository, https://github.com/asyncgui/asynckivy-ext-queue
Description-Content-Type: text/markdown

# Queue

Extension for `asynckivy` programs.

```python
from kivy.app import App
import asynckivy as ak
from asynckivy_ext.queue import Queue


async def producer(q):
    for c in "ABC":
        await q.put(c)
        print('produced', c)
    q.half_close()


async def consumer(q):
    async for c in q:
        print('consumed', c)


q = Queue(capacity=1)
ak.start(producer(q))
ak.start(consumer(q))
App().run()
```

```text
produced A
consumed A
produced B
consumed B
produced C
consumed C
```

The ``consumer()`` above can be written in more primitive way:

```python
from asynckivy_ext.queue import Closed


async def consumer(q):
    try:
        while True:
            c = await q.get()
            print('consumed', c)
    except Closed:
        pass
```

## Installation

It's recommended to pin the minor version, because if it changed, it means some *important* breaking changes occurred.

```text
poetry add asynckivy-ext-queue@~0.2
pip install "asynckivy-ext-queue>=0.2,<0.3"
```

## Tested on

- CPython 3.9 + Kivy 2.2.1
- CPython 3.10 + Kivy 2.2.1
- CPython 3.11 + Kivy 2.2.1

