{"repo":"litements/litequeue","free":true,"listed":false,"github":"https://github.com/litements/litequeue","clone":"git clone https://github.com/litements/litequeue.git","description":"Queue built on top of SQLite","language":"Python","stars":233,"topics":["sql","python","sqlite","queue","message","persitent"],"license":"MIT","category":"databases-storage","readme_excerpt":"litequeue Queue implemented on top of SQLite Why? You can use this to implement a persistent queue. It also has extra timing metrics for messages and tasks. The API lets you mark a current message claim as done . Since it's all based on SQLite / SQL, it is easily extendable. Messages are always passed as strings, so you can use json data as messages. Messages are interpreted as tasks, so after you pop a message, you need to mark its current claim as done when you finish processing it. When you run the .prune() method, it removes all finished tasks from the database. Message IDs follow RFC 9562 UUIDv7. Optional idempotency keys make ambiguous producer retries safe. Integer claim IDs prevent stale workers from changing newer message claims. Installation Install the package with uv: Python 3.12 or newer and SQLite 3 are required. Quickstart Idempotent submission Pass an idempotency key when a producer must retry an ambiguous put() : A replay with the same key and data returns the stored message. A replay with different data raises IdempotencyConflict . The key reservation exists until prune() deletes the message. See the idempotency guide for concurrency, pruning, and inbox/outbox examples. Message claims Each pop() increments the selected message's integer claim id . Pass that claim ID to done() , mark failed() , or retry() . Each transition requires its permitted source state and the current claim ID. This rule prevents a stale worker from changing a newer delivery. Message ti","default_branch":null,"files":null,"tree":[],"storefront":"/r/litements","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/litements/litequeue/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}