lightweight async distributed task queue
Project description
kuu
a native distributed task queue - simple and easy to drop into production
uv add kuu
# extras: msgspec, nats, prometheus, redis, dashboard
nothing serious in this project, just got tired of taskiq's undefined behaviour and logging.getLogger("root")
quick start
# myapp/app.py
from kuu import Kuu
from kuu.brokers.redis import RedisBroker
from kuu.results.redis import RedisResults
app = Kuu(broker=RedisBroker(url=...), results=RedisResults(url=...))
# myapp/tasks.py
from .app import app
class ChargeResult(TypedDict):
ok: bool
charged: int
@app.task
async def charge(user_id: int, amount_cents: int) -> ChargeResult:
return {"ok": True, "charged": amount_cents}
@app.schedule.cron(expr="* * */4 * * *")
async def refresh_balance() -> None: ...
# myapp/main.py
from .tasks import charge
async def run() -> None:
# type checker will automatically infer here
# that handle is type of TaskHandle[ChargeResult]
# args/kwargs of the task also remain typed
handle = await charge.q(user_id=1, amount_cents=500)
# type checker will infer ChargeResult
result = await handle.result(timeout=30)
# reads ./kuunfig.toml or [tool.kuu] in ./pyproject.toml
uv run kuu start
# reads ./path/to/kuunfig.toml and overriding specified settings
uv run kuu start -c ./path/to/kuunfig.toml -o concurrency=128 -o dashboard.enable=true
config
put the block below into kuunfig.toml, or under [tool.kuu] in your pyproject.toml
every field except app and task_modules has a default and can be omitted
app = "myapp.module:instance" # dotted path to the Kuu instance
task_modules = ["myapp.tasks"] # modules that register tasks
queues = [] # consume from; empty = auto-discover from registry
processes = 1 # worker subprocesses to spawn
concurrency = 64 # max concurrent tasks per worker
prefetch = 16 # batch size; defaults to max(1, concurrency // 4)
shutdown_timeout = 30.0 # seconds to wait for in-flight tasks on stop
[metrics]
enable = false
host = "0.0.0.0"
port = 9191
[dashboard]
enable = false
host = "0.0.0.0"
port = 8181
path = "/dashboard"
[scheduler]
enable = false # run scheduler loop in-process; jobs declared via app.schedule
[watch]
enable = false # reload workers on filesystem changes
root = "." # path to watch
respect_gitignore = true # skip files matched by .gitignore
exclude = [".git/**"] # extra globs to exclude
reload_delay = 0.25
reload_debounce = 0.5
any setting can be overridden from the CLI with -o dotted.path=value
values are parsed as JSON when possible (true, 42, ["a","b"]), otherwise kept as strings
contribution
well if you insist... (issues / PRs welcome)
#clankersgoaway
Project details
Release history Release notifications | RSS feed
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file kuu-0.1.0.tar.gz.
File metadata
- Download URL: kuu-0.1.0.tar.gz
- Upload date:
- Size: 433.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
68749024ebbbdd91ee1876abd2c3afaf368d22538878ea84a349361f64780004
|
|
| MD5 |
e2c82f756c93ef17dab241ab4853c81c
|
|
| BLAKE2b-256 |
52a71c6fa58682be66170530e855b7f5c58b8e3eb585d636086a0d040e6124ef
|
File details
Details for the file kuu-0.1.0-py3-none-any.whl.
File metadata
- Download URL: kuu-0.1.0-py3-none-any.whl
- Upload date:
- Size: 451.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f8ef57b9710d80c131ab438e7e8394ad1c2fd1f4f5e3e3f1ffd4713c2dcc7311
|
|
| MD5 |
c2e9a1b873a3b9ffb24bf35bf0f9253b
|
|
| BLAKE2b-256 |
5efbcfe56e4bf60b1c4e77f3ddc21b51d8130146c20601c211260c13b0858d0c
|